Giriş yöntemi düzenleyici (IME), kullanıcıların metin girmesine olanak tanıyan bir kullanıcı denetimidir. Android, uygulamaların kullanıcılara ekran klavyeleri veya konuşma girişi gibi alternatif giriş yöntemleri sunmasına olanak tanıyan genişletilebilir bir giriş yöntemi çerçevesi sağlar. IME'leri yükledikten sonra kullanıcı ve bunu tüm sistemde kullanabilirsiniz. Aynı anda yalnızca bir IME etkinleştirilebilir.
Android sistemine IME eklemek için şu sınıfa sahip bir Android uygulaması oluşturun:
uzatır
InputMethodService
Ayrıca, genellikle bir "ayarlar" iME hizmetine seçenekler ileten etkinliktir. Siz
sistem ayarlarının parçası olarak görüntülenen bir ayarlar kullanıcı arayüzü de tanımlayabilir.
Bu sayfada aşağıdaki konular ele alınmaktadır:
- IME yaşam döngüsü
- Uygulama manifestinde IME bileşenlerini beyan etme
- IME API'si
- IME kullanıcı arayüzü tasarlama
- IME'den uygulamaya kısa mesaj gönderme
- IME alt türleriyle çalışma
- Diğer IME ile ilgili noktalar
IME'lerle çalışmadıysanız önce Ekran Giriş Yöntemleri başlıklı giriş makalesini okuyun.
IME yaşam döngüsü
Aşağıdaki şemada bir IME'nin yaşam döngüsü açıklanmaktadır:

Aşağıdaki bölümlerde, bu yaşam döngüsünü izleyen bir IME ile ilişkili kullanıcı arayüzünün ve kodun nasıl uygulanacağı açıklanmaktadır.
Manifest dosyasında IME bileşenlerini bildirme
Android sisteminde IME, özel bir IME hizmeti içeren Android uygulamasıdır. Uygulamanın manifest dosyasında hizmet beyan edilmeli, gerekli izinler istenmeli, action.view.InputMethod
işlemiyle eşleşen bir intent filtresi sağlanmalı ve IME'nin özelliklerini tanımlayan meta veriler sağlanmalıdır. Ayrıca,
IME davranışını değiştirmesi için bir "ayarlar" başlatılması veya
Sistem Ayarları.
Aşağıdaki snippet bir IME hizmetini tanımlar. İzin istiyor
BIND_INPUT_METHOD
.
hizmetin IME'yi sisteme bağlamasını sağlamak için, işlemle eşleşen bir intent filtresi oluşturur.
android.view.InputMethod
öğesi içerir ve IME'nin meta verilerini tanımlar:
<!-- Declares the input method service. --> <service android:name="FastInputIME" android:label="@string/fast_input_label" android:permission="android.permission.BIND_INPUT_METHOD"> <intent-filter> <action android:name="android.view.InputMethod" /> </intent-filter> <meta-data android:name="android.view.im" android:resource="@xml/method" /> </service>
Sonraki snippet, IME için ayar etkinliğini açıklar. Bu etkinlik, ACTION_MAIN
için bu etkinliğin IME uygulamasının ana giriş noktası olduğunu belirten bir intent filtresine sahiptir:
<!-- Optional: an activity for controlling the IME settings. --> <activity android:name="FastInputIMESettings" android:label="@string/fast_input_settings"> <intent-filter> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity>
Ayrıca, doğrudan IME'nin kullanıcı arayüzünden IME'nin ayarlarına erişim sağlayabilirsiniz.
Giriş yöntemi API'si
IME'lere özel sınıflar
android.inputmethodservice
.
ve
android.view.inputmethod
paketlerini ekleyebilirsiniz. KeyEvent
sınıfı, klavye karakterlerini işlemek için önemlidir.
IME'nin merkezi kısmı, InputMethodService
sınıfını genişleten bir hizmet bileşenidir. Bu, normal hizmet yaşam döngüsünü uygulamanın yanı sıra
class'ta IME'nizin kullanıcı arayüzünü sağlamak, kullanıcı girişini yönetmek ve
bir alandır. Varsayılan olarak InputMethodService
sınıfı,
IME'nin durumunu ve görünürlüğünü yönetmek ve mevcut müşteri temsilcisiyle iletişim kurmak için
giriş alanına ekleyebilirsiniz.
Aşağıdaki sınıflar da önemlidir:
BaseInputConnection
-
Bir
InputMethod
kaynağından girişini alan uygulamaya kadar olan iletişim kanalını tanımlar. İmlecin etrafındaki metni okumak, metni metin kutusuna kaydetmek ve uygulamaya ham önemli etkinlikler göndermek için kullanılır. Uygulamalar, temel arayüzü uygulamak yerine bu sınıfı genişletmelidirInputConnection
KeyboardView
- .
View
uzantısı bir klavye oluşturur ve kullanıcı girişi etkinliklerine yanıt verir. Klavye düzeni, bir XML dosyasında tanımlayabileceğinizKeyboard
örneğiyle belirtilir.
Giriş yöntemi kullanıcı arayüzünü tasarlama
IME'nin iki ana görsel öğesi vardır: input görünümü ve candidates görünümünü sunar. Yalnızca işletmenizle alakalı öğeleri uygulamanız gerekir. giriş yöntemini kullanabilirsiniz.
Giriş görünümü
Giriş görünümü, kullanıcının tuşa tıklama, el yazısı veya
hareketler. IME ilk kez görüntülendiğinde sistem onCreateInputView()
callback'i çağırır. Bu yöntemi uygularken IME penceresinde görüntülemek istediğiniz düzeni oluşturun ve düzeni sisteme döndürün. Aşağıdaki snippet, Google Etiket Yöneticisi'ni kullanarak
onCreateInputView()
yöntemi:
Kotlin
override fun onCreateInputView(): View { return layoutInflater.inflate(R.layout.input, null).apply { if (this is MyKeyboardView) { setOnKeyboardActionListener(this@MyInputMethod) keyboard = latinKeyboard } } }
Java
@Override public View onCreateInputView() { MyKeyboardView inputView = (MyKeyboardView) getLayoutInflater().inflate(R.layout.input, null); inputView.setOnKeyboardActionListener(this); inputView.setKeyboard(latinKeyboard); return inputView; }
Bu örnekte MyKeyboardView
, KeyboardView
için Keyboard
öğesini oluşturan özel bir uygulama örneğidir.
Adaylar görünümü
Adaylar görünümü, IME'nin kullanıcının seçmesi için olası kelime düzeltmelerini veya önerilerini gösterdiği kullanıcı arayüzüdür. IME yaşam döngüsünde sistem, adayların görünümünü göstermeye hazır olduğunda onCreateCandidatesView()
metodunu çağırır. Bu yöntemi uygularken kelime önerilerini gösteren bir düzen döndürün veya hiçbir şey göstermek istemiyorsanız null döndürün. Boş
yanıtı varsayılan davranıştır; bu nedenle
öneriler.
Kullanıcı arayüzü tasarımında dikkat edilmesi gereken noktalar
Bu bölümde, IME'lerle ilgili bazı kullanıcı arayüzü tasarımı hususları açıklanmaktadır.
Birden fazla ekran boyutunu yönetme
IME'nizin kullanıcı arayüzü, farklı ekran boyutlarına göre ölçeklenebilmeli ve hem yatay hem de dikey yönleri desteklemelidir. Tam ekran olmayan IME modunda, uygulamanın metin alanını ve ilişkili tüm bağlamı göstermesi için yeterli alan bırakın. Böylece, ekranın en fazla yarısı IME tarafından kaplanır. Tam ekran IME modunda bu sorun yaşanmaz.
Farklı giriş türlerini işleme
Android metin alanları, serbest biçimli metin, sayılar, URL'ler, e-posta adresleri ve arama dizeleri gibi belirli bir giriş türü ayarlamanıza olanak tanır. Yeni bir IME uygularken her alanın giriş türünü algılayın ve buna uygun arayüzü sağlayın. Ancak, IME'nizi kullanıcının giriş türü için geçerli metin girip girmediğini kontrol eder. Bu, metin alanının sahibi olan uygulamanın sorumluluğundadır.
Örneğin, Latince IME'nin Android platformu metni için sağladığı arayüz aşağıda verilmiştir: giriş:

Latin IME'nin Android platformu için sayısal giriş sağlayan arayüzü aşağıda verilmiştir:

Bir giriş alanı odaklandığında ve IME'niz başladığında sistem, giriş türü ve metin alanının diğer özellikleriyle ilgili ayrıntıları içeren bir EditorInfo
nesnesi göndererek onStartInputView()
işlevini çağırır. Bu nesnede,
"the"
inputType
.
alanı, metin alanının giriş türünü içerir.
inputType
alanı, çeşitli giriş türü ayarlarının bit kalıplarını içeren bir int
'tır. Metin alanının giriş türü için test etmek üzere sabit TYPE_MASK_CLASS
ile maskeleyebilirsiniz. Örneğin:
Kotlin
inputType and InputType.TYPE_MASK_CLASS
Java
inputType & InputType.TYPE_MASK_CLASS
Giriş türü bit kalıbı, aşağıdakiler dahil çeşitli değerlerden birine sahip olabilir:
TYPE_CLASS_NUMBER
- Sayı girmek için bir metin alanı. Şekil 3'te gösterildiği gibi, Latince IME'de bir sayı tuşlarını kullanın.
TYPE_CLASS_DATETIME
- Tarih ve saat girmek için bir metin alanı.
TYPE_CLASS_PHONE
- Telefon numaralarını girmek için bir metin alanı.
TYPE_CLASS_TEXT
- Desteklenen tüm karakterleri girmek için bir metin alanı.
Bu sabitler, InputType
için referans dokümanlarında daha ayrıntılı olarak açıklanmıştır.
inputType
alanı, metin alanının varyantını belirten başka bitler içerebilir
Örneğin:
TYPE_TEXT_VARIATION_PASSWORD
- Şifre girmek için
TYPE_CLASS_TEXT
varyantı. Giriş yöntemi dingbat'lar oluşturabilirsiniz. TYPE_TEXT_VARIATION_URI
- Web URL'lerini ve diğer Tekdüzen Kaynakları girmek için
TYPE_CLASS_TEXT
varyantı Tanımlayıcılar (URI). TYPE_TEXT_FLAG_AUTO_COMPLETE
- Uygulamanın istediği metni girmek için
TYPE_CLASS_TEXT
değişkeni Bir sözlükten, aramadan veya başka bir özellikten otomatik olarak tamamlar.
Bu varyantları test ederken inputType
öğesini uygun sabitle maskeleyin. Kullanılabilir maske sabitleri, InputType
için referans dokümanlarında listelenir.
Uygulamaya metin gönderme
Kullanıcı IME'nizle metin girerken, IME'nizi tek tek göndererek uygulamaya metin gönderebilirsiniz
veya uygulamanın metin alanında imlecin etrafındaki metni düzenleyerek önemli etkinlikleri sağlayabilirsiniz. Her iki durumda da,
Metni iletmek için InputConnection
örneğini kullanın. Bu örneği almak için InputMethodService.getCurrentInputConnection()
numaralı telefonu arayın.
İmlecin etrafındaki metni düzenleme
Mevcut metinleri düzenlerken BaseInputConnection
'te kullanabileceğiniz bazı faydalı yöntemler şunlardır:
-
getTextBeforeCursor()
- Mevcut imleç konumundan önce istenen karakterlerin sayısını içeren bir
CharSequence
döndürür. -
getTextAfterCursor()
- Aşağıdakilerden sonra istenen karakterlerin sayısını içeren bir
CharSequence
döndürür: imlecin bulunduğu konuma getirin. -
deleteSurroundingText()
- Geçerli imleç konumundan önce ve sonra belirtilen sayıda karakteri siler.
-
commitText()
- Metin alanına bir
CharSequence
kaydeder ve yeni bir imleç konumu ayarlar.
Örneğin, aşağıdaki snippet'te "Hello!" ifadesini içeren bir imleç:
Kotlin
currentInputConnection.also { ic: InputConnection -> ic.deleteSurroundingText(4, 0) ic.commitText("Hello", 1) ic.commitText("!", 1) }
Java
InputConnection ic = getCurrentInputConnection(); ic.deleteSurroundingText(4, 0); ic.commitText("Hello", 1); ic.commitText("!", 1);
Kaydetmeden önce metin oluşturmayı destekleyin
IME'niz metni tahmin ediyorsa veya bir glif ya da kelime oluşturmak için birden fazla adım gerektiriyorsa
devam edin. Kullanıcı kelimeyi kaydedene kadar, yerine kısmi
kompozisyonu oluşturun. Örneğin,
span
setComposingText()
.
Aşağıdaki snippet'te, bir metin alanında ilerleme durumunun nasıl gösterileceği gösterilmektedir:
Kotlin
currentInputConnection.also { ic: InputConnection -> ic.setComposingText("Composi", 1) ic.setComposingText("Composin", 1) ic.commitText("Composing ", 1) }
Java
InputConnection ic = getCurrentInputConnection(); ic.setComposingText("Composi", 1); ic.setComposingText("Composin", 1); ic.commitText("Composing ", 1);
Donanım anahtar etkinliklerini durdurma
Giriş yöntemi penceresi açıkça odaklanmamış olsa bile donanım tuş etkinliklerini ilk olarak alır ve bunları kullanabilir ya da uygulamaya iletebilir. Örneğin, oluşturma sırasında aday seçimi için kullanıcı arayüzünüzde gezinmek üzere yön tuşlarını kullanmak isteyebilirsiniz. Giriş yöntemi penceresinden gelen tüm iletişim kutularını kapatmak için geri tuşunu da tuş tuzağından geçirebilirsiniz.
Donanım anahtarlarına müdahale etmek için
onKeyDown()
.
ve
onKeyUp()
.
Kendi başınıza yönetmek istemediğiniz anahtarlar için super()
yöntemini çağırın.
IME alt türü oluşturma
Alt türler, IME'nin birden fazla giriş modunu ve IME tarafından desteklenen dilleri göstermesine olanak tanır. Alt tür aşağıdakileri temsil eder:
- en_US veya fr_FR gibi bir yerel ayar
- Ses, klavye veya el yazısı gibi bir giriş modu
- 10 tuşlu veya QWERTY klavye düzenleri gibi IME'ye özgü diğer giriş stilleri, formları veya özellikleri
Mod, "klavye" veya "ses" gibi herhangi bir metin olabilir. Alt türler, bunların bir kombinasyonunu da gösterebilir.
Alt tür bilgileri, bildirim çubuğundan kullanılabilen IME değiştirici iletişim kutusu ve IME ayarları için kullanılır. Bu bilgiler, çerçevenin bir IME'nin belirli bir alt türünü ortaya çıkarmasına da olanak tanır. ekleyebilirsiniz. IME oluşturduğunuzda, alt tür olanağını kullanın. Çünkü bu, kullanıcının kimliğini belirleyip farklı IME dilleri ve modları arasında geçiş yapabilirsiniz.
Aşağıdaki kodu kullanarak giriş yönteminin XML kaynak dosyalarından birinde alt türleri tanımlayın:
<subtype>
öğesi. Aşağıdaki kod snippet'inde, iki alt türü olan bir IME tanımlanmaktadır: ABD İngilizcesi yerel ayarı için bir klavye alt türü ve Fransa'nın Fransızca yerel ayarı için başka bir klavye alt türü:
<input-method xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="com.example.softkeyboard.Settings" android:icon="@drawable/ime_icon"> <subtype android:name="@string/display_name_english_keyboard_ime" android:icon="@drawable/subtype_icon_english_keyboard_ime" android:languageTag="en-US" android:imeSubtypeMode="keyboard" android:imeSubtypeExtraValue="somePrivateOption=true" /> <subtype android:name="@string/display_name_french_keyboard_ime" android:icon="@drawable/subtype_icon_french_keyboard_ime" android:languageTag="fr-FR" android:imeSubtypeMode="keyboard" android:imeSubtypeExtraValue="someVariable=30,someInternalOption=false" /> <subtype android:name="@string/display_name_german_keyboard_ime" ... /> </input-method>
Alt türlerinizin kullanıcı arayüzünde doğru şekilde etiketlendiğinden emin olmak için alt türün yerel ayar etiketiyle aynı alt tür etiketini almak üzere "%s" kullanın. Bu durum, sonraki iki kod snippet'inde gösterilmektedir. İlgili içeriği oluşturmak için kullanılan ilk snippet, giriş yönteminin XML dosyasının bir kısmını gösterir:
<subtype android:label="@string/label_subtype_generic" android:imeSubtypeLocale="en_US" android:icon="@drawable/icon_en_us" android:imeSubtypeMode="keyboard" />
Sonraki snippet, IME'nin strings.xml
dosyasının bir parçasıdır. Dize kaynağı
label_subtype_generic
(Bu,
alt türün etiketi aşağıdaki gibi tanımlanır:
<string name="label_subtype_generic">%s</string>
Bu ayar, alt türün görünen adının yerel ayarıyla eşleşmesine neden olur. Örneğin, İngilizce yerel ayar, görünen ad "İngilizce (ABD)"dir.
Bildirim çubuğundan IME alt türlerini seçin
Android sistemi, tüm IME'ler tarafından sunulan tüm alt türleri yönetir. IME alt türleri, Ait olduğu IME'yi gösterir. Kullanıcı, bildirim çubuğundan veya Ayarlar uygulamasından, aşağıdaki şekilde gösterildiği gibi kullanılabilir IME alt türlerinin bulunduğu bir menüye gidebilir:

Sistem ayarlarından IME alt türlerini seçme
Kullanıcı, alt türlerin nasıl kullanıldığını da Dil ve giriş ayarları paneli girin:

IME alt türleri arasında geçiş yapma
Klavyedeki dünya şeklindeki dil simgesi gibi bir geçiş anahtarı sağlayarak kullanıcıların IME alt türleri arasında kolayca geçiş yapmasına izin verebilirsiniz. Bu, klavyenin kullanılabilirliğini artırır ve kullanışlı olur temsil eder. Bu geçişi etkinleştirmek için aşağıdaki adımları uygulayın:
- Giriş yönteminin XML kaynak dosyalarında
supportsSwitchingToNextInputMethod = "true"
öğesini tanımlayın. Beyanınız aşağıdaki kod snippet'ine benzer şekilde görünmelidir:<input-method xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="com.example.softkeyboard.Settings" android:icon="@drawable/ime_icon" android:supportsSwitchingToNextInputMethod="true">
shouldOfferSwitchingToNextInputMethod()
yöntemini çağırın.- Yöntem true değerini döndürürse bir geçiş anahtarı gösterin.
- Kullanıcı geçiş tuşuna dokunduğunda şunu ara:
switchToNextInputMethod()
iletebilir. False (yanlış) değeri, sisteme ne olursa olsun tüm alt türleri eşit şekilde Ait oldukları IME'yi seçebilme. Doğru değerini belirtmek, sistemin mevcut IME'deki alt türleri taramasını gerektirir.
Genel IME ile ilgili dikkat edilmesi gereken noktalar
IME'nizi uygularken göz önünde bulundurmanız gereken diğer noktalar şunlardır:
- Kullanıcılara, seçenekleri doğrudan IME'nin kullanıcı arayüzünden ayarlama olanağı sunun.
- Cihazda birden fazla IME yüklü olabileceğinden, kullanıcıların doğrudan giriş yöntemi kullanıcı arayüzünden farklı bir IME'ye geçmesini sağlayın.
- IME'nin kullanıcı arayüzünü hızlı bir şekilde açın. Büyük kaynakları istediğiniz zaman önceden yükleyerek veya yükleyerek bir metin alanına dokunur dokunmaz IME'yi görebilir. Daha sonrası için kaynakları ve görünümleri önbelleğe alın çağrılarına karşılık gelir.
- Uygulamaların çalışabilmesi için giriş yöntemi penceresi gizlendikten hemen sonra büyük bellek ayırma işlemlerini serbest bırakın. IME birkaç saniye boyunca gizliyse kaynakları serbest bırakmak için gecikmeli mesaj kullanın.
- Kullanıcıların, IME ile ilişkili dil veya yerel ayar için mümkün olduğunca çok karakter girebildiğinden emin olun. Kullanıcılar, şifrelerinde veya kullanıcı adlarında noktalama işareti kullanıyor olabilir. Bu nedenle, IME'niz kullanıcıların şifre girmelerine ve web'e erişmelerine izin vermek için olanak tanır.