Viewの表示時の初期フォーカスは<requestFocus/>で設定できるが、デフォルトでフォーカスが移動しないコンポーネントにフォーカスを当てたい場合、android:focusable=”true”とandroid:focusableInTouchMode=”true”を指定するとよい。
設定画面で、EditTextとSwitchの組み合わせなどで初期フォーカスをEditTextに当てたくない場合(Viewを開いたときにキーボードが表示されてしまうため)、LinearLayoutなどに無理やりフォーカスを移すことで、EditTextからフォーカスを奪える。
6行目と7行目がポイント。
<LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:focusable="true" android:focusableInTouchMode="true"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="switch" android:layout_weight="1" /> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="end" android:textOn="On" android:textOff="Off"/> <requestFocus/> <!-- ここにフォーカス --> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="text" android:layout_weight="1"/> <!-- このEditTextにフォーカスを当てたくない --> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="end"/> </LinearLayout>