Sementara kebanyakan orang telah menjawab pertanyaan secara langsung, saya ingin menguraikan lebih lanjut tentang konsep di baliknya. Pertama, saya tertarik pada IME ketika saya membuat Aktivitas Login default. Ini menghasilkan beberapa kode untuk saya yang termasuk yang berikut:
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_password"
android:imeActionId="@+id/login"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:singleLine="true"/>
Anda seharusnya sudah terbiasa dengan atribut inputType. Ini hanya memberi tahu Android jenis teks yang diharapkan seperti alamat email, kata sandi, atau nomor telepon. Daftar lengkap nilai yang mungkin dapat ditemukan di sini .
Namun, atribut imeOptions="actionUnspecified"
itulah yang saya tidak mengerti tujuannya. Android memungkinkan Anda untuk berinteraksi dengan keyboard yang muncul dari bawah layar saat teks dipilih menggunakan InputMethodManager
. Di sudut bawah keyboard, ada tombol, biasanya tertulis "Next" atau "Done", tergantung pada bidang teks saat ini. Android memungkinkan Anda untuk menyesuaikan ini menggunakan android:imeOptions
. Anda dapat menentukan tombol "Kirim" atau tombol "Berikutnya". Daftar lengkapnya dapat ditemukan di sini .
Dengan itu, Anda dapat mendengarkan penekanan pada tombol tindakan dengan menentukan a TextView.OnEditorActionListener
untuk EditText
elemen. Seperti dalam contoh Anda:
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(EditText v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//do here your stuff f
return true;
}
return false;
}
});
Sekarang dalam contoh saya, saya memiliki android:imeOptions="actionUnspecified"
atribut. Ini berguna ketika Anda ingin mencoba masuk pengguna ketika mereka menekan tombol enter. Di Aktivitas Anda, Anda dapat mendeteksi tag ini dan kemudian mencoba login:
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.id.login || id == EditorInfo.IME_NULL) {
attemptLogin();
return true;
}
return false;
}
});