Widżet lupy jest dostępny w Androidzie 9 (poziom interfejsu API 28) i nowszych. To wirtualne szkło powiększające, które wyświetla powiększoną kopię elementu View
w panelu nakładki reprezentującej obiektyw. Ta funkcja ułatwia użytkownikom
wstawianie i wybór tekstu. Po zastosowaniu lupy do tekstu użytkownik może dokładnie ustawić kursor lub uchwyty wyboru, wyświetlając powiększony tekst w panelu, który podąża za palcem.
Rysunek 1 przedstawia, jak lupa ułatwia zaznaczenie tekstu. Interfejsy API powiększania nie są powiązane z tekstem i można korzystać z tego widżetu w różnych zastosowaniach, np. do odczytywania małego tekstu lub powiększania trudno widocznych nazw miejsc na mapach.
lupa jest już zintegrowana z widżetami platformy, takimi jak TextView
, EditText
i WebView
. Umożliwia spójne edytowanie tekstu w różnych aplikacjach.
Widżet ma prosty interfejs API i może służyć do powiększania dowolnych elementów View
w zależności od kontekstu aplikacji.
Wykorzystanie interfejsu API
Lupy możesz używać w dowolnym widoku automatycznie w ten sposób:
Kotlin
val view: View = findViewById(R.id.view) val magnifier = Magnifier.Builder(view).build() magnifier.show(view.width / 2.0f, view.height / 2.0f)
Java
View view = findViewById(R.id.view); Magnifier magnifier = new Magnifier.Builder(view).build(); magnifier.show(view.getWidth() / 2, view.getHeight() / 2);
Zakładając, że hierarchia widoków ma pierwszy układ, na ekranie pojawia się lupa i zawiera region wyśrodkowany na podanych współrzędnych w widoku. Okienko pojawi się nad punktem środkowym kopiowanej treści. Lupa będzie obowiązywać bezterminowo, dopóki użytkownik jej nie zamknie.
Ten fragment kodu pokazuje, jak zmienić tło widoku powiększonego:
Kotlin
view.setBackgroundColor(...)
Java
view.setBackgroundColor(...);
Zakładając, że kolor tła jest widoczny w lupy, zawartość lupy jest nieaktualna, ponieważ nadal widoczny jest region widoku ze starym tłem. Aby odświeżyć treść, użyj metody update()
w ten sposób:
Kotlin
view.post { magnifier.update() }
Java
view.post(magnifier::update);
Gdy skończysz, zamknij lupę, wywołując metodę dismiss()
:
Kotlin
magnifier.dismiss()
Java
magnifier.dismiss();
Powiększenie przy interakcji użytkownika
Częstym przypadkiem użycia lupy jest umożliwianie użytkownikowi powiększania obszaru widoku przez dotykanie go, jak pokazano na ilustracji 2.
Możesz to zrobić, aktualizując lupę zgodnie ze zdarzeniami dotknięciami odebranymi przez widok:
Kotlin
imageView.setOnTouchListener { v, event -> when (event.actionMasked) { MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE -> { val viewPosition = IntArray(2) v.getLocationOnScreen(viewPosition) magnifier.show(event.rawX - viewPosition[0], event.rawY - viewPosition[1]) } MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_UP -> { magnifier.dismiss() } } true }
Java
imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: // Fall through. case MotionEvent.ACTION_MOVE: { final int[] viewPosition = new int[2]; v.getLocationOnScreen(viewPosition); magnifier.show(event.getRawX() - viewPosition[0], event.getRawY() - viewPosition[1]); break; } case MotionEvent.ACTION_CANCEL: // Fall through. case MotionEvent.ACTION_UP: { magnifier.dismiss(); } } return true; } });
Dodatkowe uwagi dotyczące lupy
W przypadku widżetów tekstowych platformy trzeba poznać sposób działania lupy i spójnie jej włączyć w niestandardowym widoku tekstu na całej platformie Androida. Weź pod uwagę następujące kwestie:
- Lupa uruchamia się natychmiast, gdy użytkownik chwyci uchwyt wstawiania lub wyboru.
- Lupa zawsze płynnie podąża za palcem użytkownika w poziomie, a w pionie jest umieszczona na środku bieżącej linii tekstu.
- Gdy poruszasz się w poziomie, lupa przesuwa się tylko między lewą a prawą granicą bieżącej linii. Co więcej, gdy dotknięcie użytkownika wykracza poza te granice, a odległość w poziomie między dotknięciem a najbliższą granicą przekracza połowę pierwotnej szerokości zawartości powiększającej, lupa jest zamykana, ponieważ kursor nie jest już w nim widoczny.
- Lupa nigdy się nie uruchamia, gdy czcionka tekstu jest zbyt duża. Tekst jest uznawany za za duży, gdy różnica między początkiem i wzrostem czcionki przekracza wysokość treści, która mieści się w lupie. Uruchomienie lupy w tym przypadku nie dodaje wartości.