Ada solusi yang lebih sederhana. Setel atribut ini di tata letak induk Anda:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >
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:
findViewById(R.id.mainLayout).requestFocus();
Komentar bagus dari Guillaume Perrot :
android:descendantFocusability="beforeDescendants"
tampaknya menjadi default (nilai integer adalah 0). Ini bekerja hanya dengan menambahkan
android:focusableInTouchMode="true"
.
Sungguh, kita dapat melihat bahwa beforeDescendants
set sebagai default dalam ViewGroup.initViewGroup()
metode (Android 2.2.2). Tapi tidak sama dengan 0.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
Terima kasih untuk Guillaume.
android:focusableInTouchMode="true"
!