代码,这种方法并不是禁用软键盘,就是不让软键盘改变页面布局,效果上就像是禁用了软键盘。用于防止系统自动调整窗口布局。
如果没有添加此标志,则输入法弹出时,系统自动平移或缩放窗口,确保输入框可见。
//FLAG_ALT_FOCUSABLE_IM(Alternative Focusable IM)的作用是改变窗口在输入法弹出时的焦点管理逻辑。
//当输入法(如软键盘)显示时,系统默认会调整窗口布局(如平移或缩放),以确保输入框可见。此标志允许窗口在输入法显示时保持原有焦点状态,避免意外的布局调整。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

恢复默认行为,移除标志即可:getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

 AndroidManifest.xml中配置 android:windowSoftInputMode="adjustUnspecified|stateAlwaysHidden"  测试发现不配置也可以

        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:configChanges="orientation|screenSize|keyboard|navigation"
            android:windowSoftInputMode="adjustUnspecified|stateAlwaysHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>

 手动关闭软键盘

//获取当前焦点View
View v = getCurrentFocus();
//操作软键盘的对象
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//缩回软键盘
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

 手动打开软键盘

 //设置输入类型:文本
                txtName.setInputType(InputType.TYPE_CLASS_TEXT);
                //开启当前焦点的键盘
                View view = curAct.getCurrentFocus();
                if (view != null) {
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.toggleSoftInputFromWindow(view.getWindowToken(), InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_IMPLICIT_ONLY);
                }

                // 获取 InputMethodManager 并显示键盘
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {
                    imm.showSoftInput(txtName, InputMethodManager.SHOW_IMPLICIT);
                }

 

posted on 2025-05-08 15:45  邢帅杰  阅读(62)  评论(0)    收藏  举报