Metin büyüteci uygulama

Oluşturma yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose'da metin kullanmayı öğrenin.

Android 9 (API düzeyi 28) ve sonraki sürümlerde kullanılabilen büyüteç widget'ı, merceği temsil eden bir yer paylaşımlı bölmede View öğesinin büyütülmüş bir kopyasını görüntüleyen sanal bir büyüteçtir. Bu özellik metin ekleme ve seçme kullanıcı deneyimini iyileştirir. Kullanıcı, metne büyüteç uygulanırken büyütülmüş metni, parmağını izleyen bölmede görüntüleyerek imleci veya seçim tutma yerlerini hassas bir şekilde konumlandırabilir.

Şekil 1'de büyütecin metin seçmeyi nasıl kolaylaştırdığı gösterilmektedir. Büyüteç API'leri metne bağlı değildir ve bu widget'ı, küçük metinleri okumak veya haritalarda görülmesi zor yer adlarını genişletmek gibi çeşitli kullanım alanlarında kullanabilirsiniz.

Doğru seçim tutamacı tutulduğunda büyütecin nasıl göründüğünü gösteren resim
Şekil 1. Metin büyütülüyor. Kullanıcı doğru seçim tutma yerini sürüklediğinde, doğru yerleştirmeye yardımcı olmak için büyüteç açılır.

Büyüteç TextView, EditText ve WebView gibi platform widget'larıyla zaten entegredir. Uygulamalar arasında tutarlı metin işleme sağlar. Widget, basit bir API'yle birlikte gelir ve uygulamanızın bağlamına bağlı olarak herhangi bir View öğesini büyütmek için kullanılabilir.

API kullanımı

Büyüteci programlı bir şekilde rastgele bir görünümde aşağıdaki gibi kullanabilirsiniz:

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);

Görünüm hiyerarşisinin ilk düzene sahip olduğu varsayıldığında, büyüteç ekranda görüntülenir ve görünümdeki belirtilen koordinatlarda ortalanmış bir bölge içerir. Bölme, kopyalanan içeriğin merkez noktasının üzerinde görünür. Büyüteç, kullanıcı kapatana kadar süresiz olarak kalır.

Aşağıdaki kod snippet'i, büyütülmüş görünümün arka planının nasıl değiştirileceğini gösterir:

Kotlin

view.setBackgroundColor(...)

Java

view.setBackgroundColor(...);

Arka plan renginin büyüteçte göründüğü varsayıldığında, görünümdeki eski arka planın göründüğü bir bölge olduğundan büyütecin içeriği eskidir. İçeriği yenilemek için aşağıdaki update() yöntemini kullanın:

Kotlin

view.post { magnifier.update() }

Java

view.post(magnifier::update);

İşiniz bittiğinde dismiss() yöntemini çağırarak büyüteci kapatın:

Kotlin

magnifier.dismiss()

Java

magnifier.dismiss();

Kullanıcı etkileşimiyle büyütme

Büyüteç için yaygın bir kullanım durumu, Şekil 2'de gösterildiği gibi, kullanıcının bir görünüm bölgesini dokunarak büyütmesini sağlamaktır.

Şekil 2. Büyüteç, kullanıcının dokunmasını izler. Solunda "ImageView" ve sağ tarafında TextView içeren bir ViewGroup öğesine uygulanır.

Bunu, büyüteci, görünüm tarafından alınan dokunma etkinliklerine göre aşağıdaki gibi güncelleyerek yapabilirsiniz:

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;
    }
});

Metni büyütürken dikkat edilmesi gereken diğer noktalar

Platform metin widget'ları için belirli büyüteç davranışlarını anlamak ve özel metin görünümünüz için büyüteci Android platformunda tutarlı bir şekilde etkinleştirmek önemlidir. Aşağıdakileri göz önünde bulundurun:

  • Kullanıcı bir ekleme veya seçim tutma yerini aldığında büyüteç hemen etkinleşir.
  • Büyüteç, kullanıcının parmağını her zaman yatay olarak takip ederken dikey olarak mevcut metin satırının ortasına sabitlenir.
  • Yatay hareket ederken büyüteç yalnızca geçerli çizginin sol ve sağ sınırları arasında hareket eder. Bununla birlikte, kullanıcının dokunması bu sınırları dışına çıkarsa ve dokunma ile en yakın sınır arasındaki yatay mesafe büyüteç içeriğinin orijinal genişliğinin yarısından fazla olursa imleç artık büyüteçte görünmediğinden büyüteç kapatılır.
  • Metin yazı tipi çok büyük olduğunda büyüteç hiçbir zaman tetiklenmez. Yazı tipinin iniş ve çıkış değerleri arasındaki fark, büyütece sığan içeriğin yüksekliğinden fazla olduğunda metin çok büyük olarak kabul edilir. Bu durumda büyüteci tetiklemek değer katmaz.