代码,这种方法并不是禁用软键盘,就是不让软键盘改变页面布局,效果上就像是禁用了软键盘。用于防止系统自动调整窗口布局。
如果没有添加此标志,则输入法弹出时,系统自动平移或缩放窗口,确保输入框可见。
如果没有添加此标志,则输入法弹出时,系统自动平移或缩放窗口,确保输入框可见。
//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); }
浙公网安备 33010602011771号