Metin büyüteci uygulama

Compose yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose'da metni nasıl kullanacağınızı öğrenin.

Android 9 (API seviyesi 28) ve sonraki sürümlerde kullanılabilen büyüteç widget'ı, View öğesinin büyütülmüş bir kopyasını lensi temsil eden bir yer paylaşımı bölmesi aracılığıyla gösteren sanal bir büyüteçtir. Bu özellik, metin ekleme ve seçme kullanıcı deneyimini iyileştirir. Büyüteç metne uygulandığında kullanıcı, büyütülmüş metni parmağını takip eden bir bölmede görüntüleyerek imleci veya seçim tutamaçlarını hassas bir şekilde konumlandırabilir.

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

Doğru seçim tutma yeri alındıktan sonra büyütecin nasıl göründüğünü gösteren resim
Şekil 1. Metni büyütme Kullanıcı sağ 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 entegre edilmiştir. Uygulamalarda tutarlı metin işleme sağlar. Basit bir API ile birlikte gelen widget, 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üteç'i rastgele bir görünümde programatik olarak 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ğunu varsayarsak büyüteç ekranda gösterilir ve görünümdeki belirli koordinatlarda ortalanmış bir bölge içerir. Bu bölme, kopyalanan içeriğin orta noktasının üzerinde görünür. Büyüteç, kullanıcı kapatana kadar süresiz olarak geçerli kalır.

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

Kotlin

view.setBackgroundColor(...)

Java

view.setBackgroundColor(...);

Arka plan renginin büyüteçte göründüğünü varsayarsak büyütecin içeriği eski olur. Çünkü görünümün eski arka planla birlikte bir bölümü hala gösterilir. İç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şiminde büyütme

Büyütecin yaygın kullanım alanlarından biri, kullanıcının bir görünüm bölgesine dokunarak bu bölgeyi büyütmesine olanak tanımaktır (Şekil 2'de gösterildiği gibi).

Şekil 2. Büyüteç, kullanıcının dokunuşunu takip eder. Sol tarafta bir `ImageView`, sağ tarafta ise bir TextView içeren ViewGroup için geçerlidir.

Bunu, görünüm tarafından alınan dokunma etkinliklerine göre büyüteci 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 ek noktalar

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

  • Büyüteç, kullanıcı bir ekleme veya seçim tutamacını tuttuğunda hemen tetiklenir.
  • Büyüteç, kullanıcının parmağını her zaman yatay olarak sorunsuz bir şekilde takip ederken dikey olarak mevcut metin satırının ortasına sabitlenir.
  • Yatay olarak hareket ederken büyüteç yalnızca geçerli satırın sol ve sağ sınırları arasında hareket eder. Ayrıca, kullanıcının dokunuşu bu sınırların dışına çıktığında 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 büyük olduğunda, büyüteç kapatılır. Bunun nedeni, imlecin artık büyütecin içinde görünmemesidir.
  • Metin yazı tipi çok büyük olduğunda büyüteç hiçbir zaman tetiklenmez. Yazı tipi inişi ile çıkışı arasındaki fark, büyütece sığan içeriğin yüksekliğinden büyük olduğunda metin çok büyük kabul edilir. Bu durumda büyüteci tetiklemek değer katmaz.