Saya punya Activity
di Android, dengan dua elemen:
EditText
ListView
Ketika saya Activity
mulai, EditText
segera memiliki fokus input (kursor berkedip). Saya tidak ingin kontrol memiliki fokus input saat startup. Saya mencoba:
EditText.setSelected(false);
EditText.setFocusable(false);
Tidak berhasil Bagaimana saya bisa meyakinkan EditText
untuk tidak memilih sendiri ketika Activity
mulai?
android
listview
android-edittext
focus
Menandai
sumber
sumber
android:focusableInTouchMode="true"
!android:focusableInTouchMode="true"
mencakupandroid:focusable="true"
+ beberapa lagi, jadi dalam halandroid:focusable="true"
ini tidak perlu, dan dapat dihapus. Selain itu tampilan dummy dapat berupa Tampilan alih-alih LinearLayout. Ini menghemat daya pemrosesan + menyelamatkan Anda dari beberapa Peringatan. Dengan demikian, rekomendasi saya mengganti pandangan dummy dengan<View android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/>
Apakah masalah sebenarnya yang tidak Anda inginkan adalah fokus sama sekali? Atau Anda tidak ingin menampilkan keyboard virtual sebagai hasil pemfokusan
EditText
? Saya tidak benar-benar melihat masalah denganEditText
memiliki fokus pada memulai, tetapi jelas merupakan masalah untuk membuka jendela softInput ketika pengguna tidak secara eksplisit meminta untuk fokus padaEditText
(dan membuka keyboard sebagai hasilnya).Jika itu masalah keyboard virtual, lihat dokumentasi
AndroidManifest.xml
elemen <activity> .android:windowSoftInputMode="stateHidden"
- selalu sembunyikan ketika memasuki aktivitas.atau
android:windowSoftInputMode="stateUnchanged"
- jangan mengubahnya (mis. jangan perlihatkan jika belum ditampilkan, tetapi jika terbuka saat memasukkan aktivitas, biarkan terbuka).sumber
EditText
dari mendapatkan fokus. Ini sebenarnya jelas menyatakan bahwa ini adalah bagaimana Anda mencegah IME keyboard perangkat lunak dari membuka secara otomatis pada fokus; karena itu lebih cenderung bahwa kekhawatiran yang lebih besar adalah keyboard lunak muncul tiba-tiba, bukan fokus itu sendiri. Jika masalah Anda terkait denganEditText
fokus sebenarnya, gunakan jawaban orang lain.Ada solusi yang lebih sederhana. Setel atribut ini di tata letak induk Anda:
Dan sekarang, ketika aktivitas dimulai, tata letak utama ini akan mendapatkan fokus secara default.
Selain itu, kami dapat menghapus fokus dari tampilan anak saat runtime (mis., Setelah menyelesaikan pengeditan anak) dengan memberikan fokus ke tata letak utama lagi, seperti ini:
Komentar bagus dari Guillaume Perrot :
Sungguh, kita dapat melihat bahwa
beforeDescendants
set sebagai default dalamViewGroup.initViewGroup()
metode (Android 2.2.2). Tapi tidak sama dengan 0.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
Terima kasih untuk Guillaume.
sumber
Satu-satunya solusi yang saya temukan adalah:
android:focusable="true"
danandroid:focusableInTouchMode="true"
Dan
EditText
tidak akan mendapatkan fokus setelah memulai aktivitassumber
Masalahnya tampaknya berasal dari properti yang hanya bisa saya lihat di
XML form
tata letak.Pastikan untuk menghapus baris ini di akhir deklarasi dalam
EditText
tag XML:Itu harus memberikan sesuatu seperti itu:
sumber
menggunakan informasi yang disediakan oleh poster lain, saya menggunakan solusi berikut:
dalam tata letak XML
di onCreate ()
dan akhirnya, di onResume ()
sumber
Coba clearFocus () alih-alih
setSelected(false)
. Setiap tampilan di Android memiliki kemampuan fokus dan kemampuan memilih, dan saya pikir Anda hanya ingin menghapus fokus.sumber
myEditText.clearFocus(); myDummyLinearLayout.requestFocus();
dalamonResume
Kegiatan. Ini memastikan EditText tidak mempertahankan fokus ketika ponsel diputar.Berikut ini akan menghentikan edittext dari mengambil fokus saat dibuat, tetapi ambil saat Anda menyentuhnya.
Jadi Anda mengatur fokus ke false di xml, tetapi kuncinya adalah di java, yang Anda tambahkan pendengar berikut:
Karena Anda kembali salah, yaitu tidak mengkonsumsi acara, perilaku fokus akan berjalan seperti biasa.
sumber
Saya telah mencoba beberapa jawaban secara individual tetapi fokusnya masih pada EditText. Saya hanya berhasil menyelesaikannya dengan menggunakan dua solusi di bawah ini bersama-sama.
(Referensi dari Silver https://stackoverflow.com/a/8639921/15695 )
dan hapus
di EditText
(Referensi dari floydaddict https://stackoverflow.com/a/9681809 )
sumber
Terlambat tetapi jawaban paling sederhana, tambahkan saja ini di tata letak induk XML.
Suara positif jika itu membantu Anda! Selamat Coding :)
sumber
Tidak ada solusi ini yang berfungsi untuk saya. Cara saya memperbaiki fokus otomatis adalah:
sumber
Solusi sederhana: Penggunaan tag
AndroidManifest
inActivity
sumber
Anda hanya dapat mengatur "focusable" dan "focusable dalam mode touch" untuk menghargai benar pada pertama
TextView
darilayout
. Dengan cara ini ketika aktivitas dimulaiTextView
akan difokuskan tetapi, karena sifatnya, Anda tidak akan melihat apa pun yang terfokus pada layar dan, tentu saja, tidak akan ada keyboard yang ditampilkan ...sumber
Berikut ini bekerja untuk saya
Manifest
. Menulis ,sumber
Saya perlu menghapus fokus dari semua bidang secara terprogram. Saya baru saja menambahkan dua pernyataan berikut ke definisi tata letak utama saya.
Itu dia. Atasi masalah saya secara instan. Terima kasih, Silver, karena mengarahkan saya ke arah yang benar.
sumber
Tambahkan
android:windowSoftInputMode="stateAlwaysHidden"
tag aktivitasManifest.xml
file.Sumber
sumber
Jika Anda memiliki pandangan lain tentang aktivitas Anda seperti
ListView
, Anda juga dapat melakukan:di Anda
onResume()
untuk mengambil fokus darieditText
.Saya tahu pertanyaan ini telah dijawab tetapi hanya memberikan solusi alternatif yang bekerja untuk saya :)
sumber
Coba ini sebelum bidang pertama yang dapat diedit:
sumber
Tambahkan
onCreate
metode berikut :sumber
Karena saya tidak suka mencemari XML dengan sesuatu yang terkait dengan fungsionalitas, saya membuat metode ini yang "secara transparan" mencuri fokus dari tampilan yang dapat difokuskan pertama dan kemudian memastikan untuk menghapusnya sendiri jika diperlukan!
sumber
Terlambat, tapi mungkin bermanfaat. Buat EditText boneka di bagian atas tata letak Anda kemudian memanggil
myDummyEditText.requestFocus()
dionCreate()
Itu tampaknya berperilaku seperti yang saya harapkan. Tidak perlu menangani perubahan konfigurasi, dll. Saya membutuhkan ini untuk Aktivitas dengan TextView yang panjang (instruksi).
sumber
Tulis baris ini di Layout Induk Anda ...
sumber
Ya saya melakukan hal yang sama - membuat tata letak linear 'dummy' yang mendapat fokus awal. Selanjutnya, saya menetapkan ID fokus 'berikutnya' sehingga pengguna tidak dapat lagi memfokuskannya setelah menggulir sekali:
banyak pekerjaan hanya untuk menghilangkan fokus pada tampilan ..
Terima kasih
sumber
Bagi saya, yang berfungsi pada semua perangkat adalah ini:
Letakkan ini sebagai tampilan sebelum tampilan fokus bermasalah, dan hanya itu.
sumber
Hal paling sederhana yang saya lakukan adalah mengatur fokus pada tampilan lain di onCreate:
Ini menghentikan keyboard lunak yang muncul dan tidak ada kursor berkedip di EditText.
sumber
Ini adalah solusi sempurna dan termudah. Saya selalu menggunakan ini di aplikasi saya.
sumber
sumber
Tulis kode ini di dalam
Manifest
file diActivity
mana Anda tidak ingin membuka keyboard.File manifes:
sumber
Di
onCreate
Aktivitas Anda, tambahkan saja penggunaanclearFocus()
pada elemen EditText Anda. Sebagai contoh,Dan jika Anda ingin mengalihkan fokus ke elemen lain, gunakan
requestFocus()
itu. Sebagai contoh,sumber
Saya menggunakan kode berikut untuk menghentikan EditText dari mencuri fokus ketika tombol saya ditekan.
Pada dasarnya, sembunyikan teks edit lalu tampilkan lagi. Ini berfungsi untuk saya karena EditText tidak dalam tampilan sehingga tidak masalah apakah itu ditampilkan.
Anda bisa mencoba bersembunyi dan menunjukkannya secara berurutan untuk melihat apakah itu membantu kehilangan fokus.
sumber