EditTextを使った文字入力を持った画面を表示した場合、そのEditTextに入力フォーカスがあたり、ソフトウェアキーボード(IME)が自動的に起動します。
入力前提の画面であればその挙動が良いのですが、「既存のデータを閲覧し、必要であれば編集する」というような用途の場合、デフォルト動作としてはソフトウェアキーボードは非表示にし、必要であれば編集したい項目をタッチしてソフトウェアキーボードを表示する。というような動作が望ましいかと思います。
ソフトウェアキーボードの自動を起動しないようにするには、Layoutで下記のようにすればできます。
<TextView android:id="@+id/tvDate" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center_horizontal" android:focusable="true" android:focusableInTouchMode="true" android:text="2019/08/20" > <requestFocus /> </TextView> <EditText android:id="@+id/etSubTitle1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName"> </EditText>
入力項目であるEditTextとは別のTextViewにフォーカスを与えるようにします。TextViewにフォーカスを与えたところで入力可能な項目ではないので、ソフトウェアキーボードは不要となり、表示されることはありません。
しかし、今回は同じアクティビティでデータの有無によって動作を分けたいのです。つまり、
・新規入力の場合はデータ入力が必須なので、画面表示時にソフトウェアキーボードを自動表示
・既存データの表示時は必ずデータ入力が必要というわけではないので、画面表示時のソフトウェアキーボード自動表示はなし
としたいです。この場合、Layoutの定義では行えないので、コードで実装します。
TextView tvDate = findViewById(R.id.tvDate); tvDate.requestFocus(); tvDate.setFocusable(true); tvDate.setFocusableInTouchMode(true);
Layoutで定義した内容を実装するだけです。