软键盘弹出显示或隐藏工具类

写了一个KeyBoardUtils工具类,在你需要弹出隐藏键盘的Activity里,只需要KeyBoardUtils.registerKeyBoard(this,ids).第二个参数是EditText等输入内容的控件的id,具体看工具类。

/**
 * Created by Administrator on 2017/6/9.
 */

public class KeyBoardUtils {

    /**
     * 注意:在清单内加android:windowSoftInputMode="adjustResize"可解决覆盖问题
     * 可在activity的dispatchTouchEvent方法,在ACTION.DOWN下调用方法
     * @param activity 注册页面
     * @param ids 存放EditText等具有焦点控件
     */
    public static void registerKeyBoard(Activity activity,int[] ids){
        if(activity == null){
            return;
        }
        View v  = activity.getCurrentFocus();
        if(v == null){
            hideInputForce(activity);
            return;
        }
        if(isFocusEditText(v,ids)){
            //触摸前焦点在EditText上
            hideInputForce(activity);
        }
    }
    /**
     * 检查焦点view
     * @param view 获取的焦点
     * @param ids 存储EditText等需要输入内容的控件
     * @return true 代表ids内存在焦点空间,false .....
     */
    private static boolean isFocusEditText(View view,int[] ids){
        if(view == null){
            return false;
        }
        for(int id:ids){
            if(id == view.getId()){
                return true;
            }
        }
        return false;
    }
    /**
     * 隐藏软键盘
     * @param activity 在Activity里注册
     */
    private static void hideInputForce(Activity activity){
        if(activity == null || activity.getCurrentFocus() == null){
            return;
        }
        ((InputMethodManager)activity.getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
    }

    /**
     * 显示软键盘
     * @param context 环境
     * @param view 接受软件盘输入的view
     */
    private static void showInput(Context context, View view){
        InputMethodManager imm = (InputMethodManager) context.getSystemService(INPUT_METHOD_SERVICE);
        if(imm != null){
            view.requestFocus();
            imm.showSoftInput(view,0);
        }
    }
}


猜你喜欢

转载自blog.csdn.net/tenderness4/article/details/72957253