Metin alanlarında ekran kalemi girişi

Android 14 (API düzeyi 34) ve sonraki sürümler, kullanıcıların ekran kalemi kullanarak herhangi bir uygulamada herhangi bir metin girişi alanına yazmalarına olanak tanır. EditText bileşenleri ve WebView metin widget'ları dahil Android metin giriş alanları varsayılan olarak ekran kalemiyle girişi destekler.

Ancak uygulamanız özel metin giriş alanları gerektiriyorsa (bkz. Özel metin düzenleyiciler) veya metin giriş alanlarının bir çizim yüzeyiyle yer paylaşımlı olarak bulunduğu karmaşık bir düzene sahipse uygulamanızı özelleştirmeniz gerekir.

Şekil 1. Ekran kalemiyle el yazısıyla giriş.

EditText

Android 14 ve sonraki sürümlerde varsayılan olarak tüm EditText alanlarında ekran kalemiyle el yazısı etkindir. Görünümün el yazısı sınırları içinde ekran kalemi hareketi etkinliği algılandığında EditText için el yazısı modu başlatılır.

El yazısı sınırları, görüntünün etrafında 40 dp dikey dolgu ve 10 dp yatay dolgu içerir. setHandwritingBoundsOffsets() ile el yazısı sınırlarını ayarlayın. setAutoHandwritingEnabled(false) ile el yazısını devre dışı bırakın.

Ekran kalemi hareketi etkinliklerinin algılanmasına yönelik sınırları gösteren dikdörtgen içinde bir giriş alanı.
Şekil 2. EditText alanın el yazısı sınırı.

Giriş yetkisi

Uygulamalar, metin giriş alanları gibi görünen yer tutucu kullanıcı arayüzü öğeleri görüntüleyebilir, ancak aslında metin giriş özelliği olmayan statik kullanıcı arayüzü öğeleridir. Arama alanları buna yaygın bir örnektir. Statik kullanıcı arayüzü öğesine dokunulduğunda, giriş için odaklanmış işlevsel bir metin giriş alanı içeren yeni bir kullanıcı arayüzüne geçişi tetikler.

Şekil 3. Statik kullanıcı arayüzü öğesinden metin giriş alanına giriş yetkisi.

Ekran kalemi giriş yetkisi

Yer tutucu giriş alanlarında ekran kalemiyle el yazısı girişini desteklemek için el yazısı yetkilendirme API'lerini kullanın (bkz. setHandwritingDelegatorCallback() ve setIsHandwritingDelegate()). Yer tutucu kullanıcı arayüzü öğesi, el yazısını işlevsel bir giriş alanına yetki verecek şekilde yapılandırılmıştır. Örneğin:

Kotlin

if (Build.VERSION.SDK_INT >= 34) {
    placeholderInputField.setHandwritingDelegatorCallback {
        showAndFocusDelegateInputField()
    }
    delegateInputField.setIsHandwritingDelegate(true)
}

Java

if (Build.VERSION.SDK_INT >= 34) {
    placeholderInputField.setHandwritingDelegatorCallback(this::showAndFocusInputFieldDelegate);
    delegateInputField.setIsHandwritingDelegate(true);
}

Ekran kaleminin yer tutucu metin giriş alanı görünümü üzerinde hareket etmesi geri çağırmayı başlatır. Geri çağırma, işlevsel giriş alanını göstermek ve odaklamak için kullanıcı arayüzü geçişini tetikler. Geri çağırma uygulaması, genellikle yer tutucu öğedeki bir tıklama işleyici uygulamasıyla aynıdır. İşlevsel giriş alanı bir InputConnection oluşturduğunda ekran kalemi el yazısı modu başlar.

Şekil 4. Statik kullanıcı arayüzü öğesinden metin giriş alanına ekran kalemiyle giriş yetkisi.

Materyal Tasarım

com.google.android.material.search kitaplığı, yer tutucu kullanıcı arayüzü kalıbının uygulanmasını kolaylaştırmak için SearchBar ve SearchView sınıflarını sağlar.

Yer tutucu ve işlevsel arama görünümleri setUpWithSearchBar() ile bağlantılıdır.

El yazısı yetkisi verme, Malzeme kitaplığında yapılandırılmıştır. Uygulamanızda ek geliştirme yapmanız gerekmez.

Çizim yüzeyleriyle örtüşme

Uygulamanızın yüzeyinde bir metin alanı bulunan çizim yüzeyi varsa kullanıcının çizim yapabilmesi için ekran kalemiyle el yazısını devre dışı bırakmanız gerekebilir. İlgili konu: setAutoHandwritingEnabled().

Test etme

Ekran kalemiyle el yazısı, Android 14 ve sonraki sürümleri çalıştıran, uyumlu bir ekran kalemi giriş cihazı ve Android 14 ekran kalemi el yazısı API'lerini destekleyen bir giriş yöntemi düzenleyicisi (IME) bulunan cihazlarda desteklenir.

Ekran kalemi giriş cihazınız yoksa aşağıdaki Android Debug Bridge (adb) komutlarını kullanarak root erişimi olan (emülatörler dahil) tüm cihazlarda ekran kalemi girişini simüle edin:


// Android 14
adb shell setprop persist.debug.input.simulate_stylus_with_touch true && adb shell stop && adb shell start

// Android 15 and higher
// Property takes effect after screen reconfiguration such as orientation change.
adb shell setprop debug.input.simulate_stylus_with_touch true

Ekran kalemini desteklemeyen bir cihaz kullanıyorsanız test için Gboard beta sürümünü kullanın.

Ek kaynaklar