Android 软键盘
- 软键盘的弹出
在 dialog 下:
getActivity().getWindow().getDecorView().postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
Log.e(TAG, "run: 显示软键盘");
messageEt.setVisibility(View.VISIBLE);
messageEt.requestFocus();
imm.showSoftInput(messageEt, 0);
}
}
}, 200);
- 软键盘的关闭
在 dialog 下:
InputMethodManager imm1 = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm1 != null) {
View v = new View(getActivity());
ViewGroup g1 = (ViewGroup)getActivity().getWindow().getDecorView();
ViewGroup g2 = (ViewGroup)g1.getChildAt(0);
g2.addView(v);
imm1.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
软键盘是否需要挤压窗口
是:如何做?
(1)可在
AndroidManifest.xml
对应的Activity
里添加上这条属性:
android:windowSoftInputMode="adjustPan|stateAlwaysVisible"
(2)在setContentView(R.layout.xxx);
前设置
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
否:如何做?
( 1 ) 可在
AndroidManifest.xml
对应的Activity
里添加上这条属性:
android:windowSoftInputMode="adjustResize|stateAlwaysVisible"
(2)在setContentView(R.layout.xxx);
前设置
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
软键盘和沉浸式的问题
方法1. 用scrollerView
包裹需要滚动的布局
方法2. 在edittext
跟布局 设置android:fitsSystemWindows="true"
,如果还有布局相关的问题再在上一层布局添加android:fitsSystemWindows="true"
EditText
控制输入类型 可参考 —-> Android 键盘适配-中英文适配
inputType="参数"
,这里注意使用number
时不能输入小数点改变下划线的粗细
设置background=@null
然后在下方添加一个view
布局 ,高度为下划线的高度,颜色为下划线的颜色取消 editext 自动获取焦点
解决之道:在EditText
的父级控件中设置添加以下两个属性:android:focusable="true" android:focusableInTouchMode="true"
这样,就把
EditText
默认的行为截断了!
参考:
Android 软键盘的全面解析,让你不再怕控件被遮盖
Android 键盘适配-中英文适配
彻底搞定 Android 开发中软键盘的常见问题
Android 手动显示和隐藏软键盘方法总结