KonifarPod

Androidでキーボードの表示・非表示を制御する便利クラス作った

   

Pocket

Android開発していると、Activity表示時にEditTextにフォーカスが当たって勝手にキーボードが表示されてしまったり、表示されてほしいのにされなかったりとちょっと面倒なことがあります。

調べてみるとキーボードの表示・非表示を制御するやり方は腐るほど出てくるんですが、いい感じにまとまってるものがなかったので、自分で便利クラス作ってみました。

package com.padule.cospradar.util;

import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.view.View;
import android.view.WindowManager.LayoutParams;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

public class KeyboardUtils {

    public static void hide(Context context, View view) {
        if (view != null) {
            InputMethodManager imm = (InputMethodManager)context.getSystemService(
                    Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            view.clearFocus();
        }
    }

    public static void hide(Activity activity) {
        hide(activity, activity.getCurrentFocus());
    }

    public static void initHidden(Activity activity) {
        activity.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    }

    public static void show(Context context, EditText edit) {
        show(context, edit, 0);
    }

    public static void show(final Context context, final EditText edit, int delayTime) {
        final Runnable showKeyboardDelay = new Runnable() {
            @Override
            public void run() {
                if (context != null) {
                    InputMethodManager imm = (InputMethodManager)context
                            .getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.showSoftInput(edit, InputMethodManager.SHOW_IMPLICIT);
                }
            }
        };
        new Handler().postDelayed(showKeyboardDelay, delayTime);
    }
}

表示したい時はshow()、非表示にしたい時はhide()を呼ぶだけです。

Activityが表示される時にキーボードが表示されるのを防ぎたい時は、onCreate()でKeyboardUtils.initHidden()を呼べばOKです。

結構楽に使えるので、キーボード制御に困っていたら参考にどうぞ。

Pocket

 - 未分類 ,