【Android Studio&Kotlin】キーボード入力の決定ボタンを画面タップで決定に変更する方法

こんにちは。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()で、フォーカスを移します。

まとめ

 

今回はキーボード入力の決定ボタンを画面タップで決定する方法についてお伝えしました。

 

※プログラミングは習得中ですので、参考程度に記事を読んでください。

 

参考はこちら

あなたは「Web集客」に限界を感じていませんか?

サイトをただ作るだけで満足ですか?

あなたのサービスやコンテンツはとっても有益なものがたくさんあります。

良いコンテンツも埋もれてしまっては全く意味がありません。

正しい知識と実践で、SEO対策はもちろん、ユーザビリティーを考えたサイトを作りませんか?

私と歩めばWebマーケティング知識とWordPressスキルが定着し、サイト回遊率、再訪問がアップします。

しかも、これだけでは終わりません!!

その先の「攻めのメディア」と組み合わせ、あなたのサービスを広めて売上を伸ばしていきます。

サイトを育てて、長い間愛されることのできるWordPressサイトからの集客導線(ゴールデンルート)を一緒に作りませんか?

↓ ↓ ↓ ↓ ↓ ↓ 

おすすめの記事