Một giải pháp đơn giản hơn tồn tại. Đặt các thuộc tính này trong bố trí cha mẹ của bạn:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >
Và bây giờ, khi hoạt động bắt đầu, bố cục chính này sẽ được lấy nét theo mặc định.
Ngoài ra, chúng ta có thể xóa tiêu điểm khỏi chế độ xem con trong thời gian chạy (ví dụ: sau khi hoàn thành chỉnh sửa con) bằng cách đặt lại tiêu điểm cho bố cục chính, như sau:
findViewById(R.id.mainLayout).requestFocus();
Nhận xét tốt từ Guillaume Perrot :
android:descendantFocusability="beforeDescendants"
dường như là mặc định (giá trị nguyên là 0). Nó hoạt động chỉ bằng cách thêm
android:focusableInTouchMode="true"
.
Thực sự, chúng ta có thể thấy rằng beforeDescendants
thiết lập là mặc định trong ViewGroup.initViewGroup()
phương thức (Android 2.2.2). Nhưng không bằng 0.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
Cảm ơn Guillaume.
android:focusableInTouchMode="true"
!