【Android】初期フォーカス その2

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>
  • このエントリーをはてなブックマークに追加