Stosowanie lupy

Wypróbuj sposób tworzenia wiadomości
Jetpack Compose to zalecany zestaw narzędzi UI na Androida. Dowiedz się, jak używać tekstu w sekcji Utwórz

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.

Ilustracja przedstawiająca działanie lupy po kliknięciu prawego uchwytu wyboru
Rysunek 1. Powiększanie tekstu. Gdy użytkownik przeciągnie prawy uchwyt wyboru, wysunie się lupa, aby pomóc w dokładnym położeniu.

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.

Rysunek 2. Lupa podąża za dotykiem użytkownika. Jest stosowany do obiektu ViewGroup, który zawiera obiekt „ImageView” po lewej stronie i element TextView po prawej.

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.