こんにちは。
最近は朝食にフルーツグラノーラを食べることが多い、mukaiyachiです。
今回から数回にわけて、AndroidのEditTextのちょっとしたTipsについて紹介していきます。
よろしくお願いいたします。
今回は「EditText入力時に背景をタップしたらキーボードが閉じるようにする」方法について紹介します。
Androidのソフトキーボードは通常、ハードウェアのバックボタンを押さないと閉じられません。
そうではなくて、EditText以外の部分をタップしたら閉じるようにします。
アプリを開発している時に、あまりAndroidの操作になれていない人にキーボードを閉じる方法をわかりやすく伝えたいと思いこの方法を使うことにしました。
EditText以外の部分をタップするようにしたい場合は画面にタッチイベントをつけてキーボードを閉じるようにします。
まずはレイアウトファイルをつくります。
EditTextがある簡単な画面です。
■レイアウトファイル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> |
次はアクティビティ側です。
onTouchEvent()メソッドで背景にタッチイベントを追加し、そのコールバックでキーボードを閉じるようにしています。
■アクティビティ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
public class HelloActivity extends Activity { private InputMethodManager inputMethodManager; private LinearLayout mainLayout; private EditText editText @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //キーボードを閉じたいEditTextオブジェクト editText = (EditText) findViewById(R.id.editText); //画面全体のレイアウト mainLayout = (LinearLayout)findViewById(R.id.mainLayout); //キーボード表示を制御するためのオブジェクト inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); } /** * EditText編集時に背景をタップしたらキーボードを閉じるようにするタッチイベントの処理 */ @Override public boolean onTouchEvent(MotionEvent event) { //キーボードを隠す inputMethodManager.hideSoftInputFromWindow(mainLayout.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); //背景にフォーカスを移す mainLayout.requestFocus(); return false; } } |
以上となります。
ぜひお試しください。