woshidan's blog

あいとゆうきとITと、とっておきの話。

周囲をタッチしたらEditTextのフォーカスを奪う

EditTextにフォーカス当たってても戻るキーを押したら、キーボード閉じるんですけど、ちょっと不便だわという感じなので、何も無いところというかEditText以外をタップしたらEditTextのフォーカスを奪うようにします。

ActivityでView.OnTouchListenerを実装して、onTouchメソッドから以下のような感じです。

public class MainActivity extends AppCompatActivity implements View.OnTouchListener {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        findViewById(R.id.formFrame).setOnTouchListener(this);
    }

   /* 略 */

    @Override
    public boolean onTouch(View v, MotionEvent me) {
        // http://furudate.hatenablog.com/entry/2013/11/17/120529
        // タッチしたのがEditText以外ならダミー要素にFocusを移す
        if (v.getId() != R.id.EditText1 && v.getId() != R.id.EditText2) {
            findViewById(R.id.dummyFocus).requestFocus();

            // http://techbooster.jpn.org/andriod/ui/7427/
            // キーボードを隠す
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
        return true;
    }

f:id:woshidan:20160119013540g:plain

参考

furudate.hatenablog.com

techbooster.jpn.org