android弹出和关闭软键盘

本文介绍了如何在Android应用中实现软键盘的显示与隐藏,并提供了具体的代码实现。此外还介绍了如何通过布局属性防止软键盘遮挡底部控件,以及如何设置默认键盘状态。

之前的写法有问题,这里记下免得以后再用错:

    /**
     * 显示键盘
     *
     * @param et 输入焦点
     */
    public void showInput(final EditText et) {
        et.requestFocus();
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
    }

    /**
     * 隐藏键盘
     */
    protected void hideInput() {
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        View v = getWindow().peekDecorView();
        if (null != v) {
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }
    }

另外,避免软键盘弹出会覆盖底部控件的方法是在布局文件根布局加上一个属性:

android:fitsSystemWindows="true"

设置默认不弹出键盘:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);// 设置默认键盘不弹出

注意:最新发现,隐藏软键盘不可以放在onDestroy()方法里面执行,而应该放在finish()方法之前执行,否则会出现隐藏后又弹出的奇怪问题。

 

 

Android 应用开发中,关闭软键盘是一个常见的需求,尤其是在用户点击屏幕其他区域或完成输入后。以下是几种常用的方法来关闭软键盘: ### 1. 点击外部区域关闭软键盘 可以通过监听视图外部的点击事件来关闭软键盘。以下是一个示例方法: ```java public void setHintKeyboardView(View view) { if (!(view instanceof EditText)) { view.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { hintKeyboard(getActivity()); return false; } }); } if (view instanceof ViewGroup) { for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { View innerView = ((ViewGroup) view).getChildAt(i); setHintKeyboardView(innerView); } } } ``` ### 2. 强制关闭软键盘 可以使用 `InputMethodManager` 来强制关闭软键盘。以下是一个示例方法: ```java public static void closeKeyboard(Context context, View view) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } ``` ### 3. 改变软键盘状态 可以使用 `toggleSoftInput` 方法来切换软键盘的状态(如果已经弹出关闭,如果关闭弹出): ```java public static void chageInputState(Context context) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } ``` ### 4. 点击其他区域关闭软键盘 可以通过检测点击事件的坐标来判断是否点击在输入框外部,从而关闭软键盘: ```java if (ev.getX() > left && ev.getX() < right && ev.getY() > top && ev.getY() < bottom) { // 点击在输入框内部,不做任何操作 } else { // 点击在输入框外部,关闭软键盘 InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } ``` ### 注意事项 - 确保在适当的时机调用关闭软键盘的方法,例如在用户完成输入后或点击屏幕其他区域时。 - 在某些情况下,可能需要传递正确的 `View` 对象以确保软键盘能够正确关闭
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值