Saya suka UI saya yang intuitif; setiap layar harus secara alami dan tidak mencolok memandu pengguna ke langkah berikutnya dalam aplikasi. Kecuali itu, saya berusaha untuk membuat segala sesuatunya membingungkan dan membingungkan mungkin.
Hanya bercanda :-)
Saya punya tiga TableRow
s, masing-masing berisi kontrol EditText read-only dan non-focusable dan kemudian tombol di sebelah kanannya. Setiap tombol memulai aktivitas yang sama tetapi dengan argumen yang berbeda. Pengguna membuat pilihan di sana dan sub kegiatan selesai, mengisi yang sesuai EditText
dengan pilihan pengguna.
Ini adalah mekanisme nilai berjenjang klasik; setiap pilihan mempersempit pilihan yang tersedia untuk pilihan berikutnya, dll. Jadi saya menonaktifkan kedua kontrol pada setiap baris berikutnya sampai EditText pada baris saat ini berisi nilai.
Saya perlu melakukan satu dari dua hal, dalam urutan preferensi ini:
- Saat tombol diklik, segera hapus fokus tanpa menyetel fokus ke tombol lain
- Setel fokus ke tombol pertama saat aktivitas dimulai
Masalahnya muncul setelah sub kegiatan kembali; tombol yang diklik mempertahankan fokus.
Re: # 1 di atas - Sepertinya tidak ada removeFocus()
metode, atau yang serupa
Perihal: # 2 di atas - Saya dapat menggunakan requestFocus()
untuk menyetel fokus ke tombol di baris berikutnya, dan itu berfungsi setelah sub kegiatan kembali, tetapi untuk beberapa alasan itu tidak berfungsi di aktivitas induk onCreate()
.
Saya membutuhkan konsistensi UI di kedua arah - baik tidak ada tombol yang memiliki fokus setelah sub kegiatan selesai atau setiap tombol menerima fokus tergantung pada tempatnya di alur logika, termasuk tombol aktif pertama (dan satu-satunya) sebelum pemilihan apa pun.
sumber
Pertanyaan lama, tetapi saya menemukannya ketika saya memiliki masalah serupa dan berpikir saya akan membagikan apa yang akhirnya saya lakukan.
Pemandangan yang mendapatkan fokus berbeda setiap kali, jadi saya menggunakan yang sangat umum:
sumber
getCurrentFocus()?.clearFocus();
, begitu bagus dan elegan: - /Anda bisa menggunakan
View.clearFocus()
.Gunakan
View.requestFocus()
dipanggil darionResume()
.sumber
android:descendantFocusability="beforeDescendants"
menggunakan yang berikut ini dalam aktivitas dengan beberapa opsi tata letak di bawah ini tampaknya berfungsi sesuai keinginan.
sehubungan dengan parameter berikut pada tampilan root.
https://developer.android.com/reference/android/view/ViewGroup#attr_android:descendantFocusability
Terima kasih kepada: https://forums.xamarin.com/discussion/1856/how-to-disable-auto-focus-on-edit-text
Tentang windowSoftInputMode
sumber
Saya menggunakan ini ketika sudah selesai memperbarui info profil dan menghapus semua fokus dari EditText di tata letak saya
====> Update: Dalam konten tata letak induk, baris edit EditText saya:
sumber
Bagaimana dengan menambahkan
android:windowSoftInputMode="stateHidden"
aktivitas Anda di manifes.Diambil dari orang pintar yang mengomentari ini: https://stackoverflow.com/a/2059394/956975
sumber
Pertama-tama, ini akan 100% berhasil ........
onResume()
metode.onResume()
temukan pemandangan yang terus menerus memusatkan perhatianfindViewById()
.onResume()
setrequestFocus()
ini ke tampilan ini.onResume()
setclearFocus
ini ke tampilan ini.focusable
benar danfocusableInTuch
benar.onResume()
temukan tampilan atas olehfindViewById
onResume()
setrequestFocus()
ke tampilan ini pada akhirnya.sumber
Saya mencoba menonaktifkan dan mengaktifkan fokus untuk tampilan dan berhasil untuk saya (fokus disetel ulang):
sumber
Anda dapat mencoba mematikan kemampuan Aktivitas utama untuk menyimpan statusnya (sehingga melupakan kontrol apa yang memiliki teks dan apa yang memiliki fokus). Anda perlu memiliki cara lain untuk mengingat apa yang dimiliki EditText Anda dan mengisi kembali mereka di onResume (). Luncurkan sub-Aktivitas Anda dengan startActivityForResult () dan buat penangan onActivityResult () di Aktivitas utama Anda yang akan memperbarui EditText dengan benar. Dengan cara ini Anda dapat menyetel tombol yang tepat yang ingin Anda fokuskan padaResume () pada saat yang sama Anda mengisi ulang EditText dengan menggunakan myButton.post (new Runnable () {run () {myButton.requestFocus ();}});
Metode View.post () berguna untuk mengatur fokus pada awalnya karena runnable itu akan dijalankan setelah jendela dibuat dan semuanya tenang, memungkinkan mekanisme fokus berfungsi dengan baik pada saat itu. Saya menemukan bahwa mencoba menetapkan fokus selama onCreate / Start / Resume () biasanya mengalami masalah.
Harap dicatat bahwa ini adalah pseudo-code dan tidak diuji, tetapi ini adalah arah yang mungkin Anda coba.
sumber
Tambahkan mereka ke ViewGroup Anda yang menyertakan EditTextView Anda. Ini berfungsi dengan baik untuk Constraint Layout saya. Semoga bantuan ini
sumber
Coba yang berikut ini (menelepon
clearAllEditTextFocuses();
)sumber