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.
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.
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.