こんにちは。YOSHITAKA(@YOSHITA19704216)です。
開発する上ではEditTextは、普通に実装するだけでは、画面をタップしても、入力は完了しません。一工夫する必要があるんです。
多くのアプリは、画面タップで入力が完了するよう実装されておりますので、ユーザーにとってはそれが当たり前に感じていると思います。
- kotlinで開発している人で、キーボードの入力後の背景タップで入力される方法がわかります。
Contents
キーボード入力の決定ボタンを画面タップで決定
画面タップは2つのファイルの設定が必要
- 今回は画面の作成方法と処理部分のファイルの基礎がわかっていないと読みづらいものとなっています。
- 画面のファイルは「activity_main.xml」
- 処理のファイルは「MainActivity.kt」
以上のことを踏まえて読んでください。
activity_main.xml
重要なのは以下の二行の部分です。
ここの名称は自由なので変えても良いです。
android:id="@+id/container"
ここでモードを変えておきましょう。
android:focusableInTouchMode="true"
メインのlayoutはLinearLayoutを利用しています。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
android:orientation="vertical">
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
- idは以下のMainActivity.ktと同じ名称に設定してください。
MainActivity.kt
class MainActivity : AppCompatActivity() {
// 最後に読み込みます
private lateinit var container: LinearLayout
// キーボード表示を制御するためのオブジェクトを設定
private lateinit var inputMethodManager: InputMethodManager
//ここまでは上にないといけません。順番は変えないようにしましょう
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 背景のレイアウトを取得。名称はactivity_main.xmlのidの名称に変更します。
container = findViewById(R.id.container)
// InputMethodManagerを取得(キーボードの操作のために必要です。)
inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
}
// 画面タップ時に呼ばれる
override fun onTouchEvent(event: MotionEvent): Boolean {
// キーボードを隠す
inputMethodManager.hideSoftInputFromWindow(container.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS)
// 背景にフォーカスを移す
container.requestFocus()
return false
}
}
キーボードを制御するには、InputMethodManagerを使用します。onCreateでInputMethodManagerを取得しておきます。
onTouchEventは、画面をタップした際に呼ばれるコールバックです。
onTouchEventが呼ばれた時に、InputMethodManagerのhideSoftInputFromWindow()で、キーボードを非表示にします。EditTextの選択状態を解除するため、親レイアウトに対し、requestFocus()で、フォーカスを移します。
まとめ
今回はキーボード入力の決定ボタンを画面タップで決定する方法についてお伝えしました。
※プログラミングは習得中ですので、参考程度に記事を読んでください。