มีวิธีแก้ไขที่ง่ายกว่า ตั้งค่าแอตทริบิวต์เหล่านี้ในเลย์เอาต์หลักของคุณ:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >
และตอนนี้เมื่อกิจกรรมเริ่มโครงร่างหลักนี้จะได้รับการโฟกัสตามค่าเริ่มต้น
นอกจากนี้เราสามารถลบโฟกัสออกจากมุมมองเด็กที่รันไทม์ (เช่นหลังจากแก้ไขเด็กเสร็จสิ้น) โดยให้ความสำคัญกับเค้าโครงหลักอีกครั้งเช่นนี้:
findViewById(R.id.mainLayout).requestFocus();
ความคิดเห็นที่ดีจากGuillaume Perrot :
android:descendantFocusability="beforeDescendants"
น่าจะเป็นค่าเริ่มต้น (ค่าจำนวนเต็มคือ 0) android:focusableInTouchMode="true"
มันทำงานได้โดยการเพิ่ม
จริงๆเราจะเห็นว่าการbeforeDescendants
ตั้งค่าเป็นค่าเริ่มต้นในViewGroup.initViewGroup()
วิธีการ (Android 2.2.2) แต่ไม่เท่ากับ 0ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
ขอบคุณ Guillaume
android:focusableInTouchMode="true"
!