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