键盘弹起收回监听
1 通过 OnLayoutChangeListener
亲测,有效,fragment中不知道是否有效,讲道理,应该没问题
activity 一定要设置以下属性,否则不生效
android:windowSoftInputMode="adjustResize"
作者:开端总是良好
链接:https://www.zhihu.com/question/44269936/answer/97260849
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
public class MainActivity extends Activity implements OnLayoutChangeListener{
//Activity最外层的Layout视图
private View activityRootView;
//屏幕高度
private int screenHeight = 0;
//软件盘弹起后所占高度阀值
private int keyHeight = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activityRootView = findViewById(R.id.root_layout);
//获取屏幕高度
screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();
//阀值设置为屏幕高度的1/3
keyHeight = screenHeight/3;
}
@Override
protected void onResume() {
super.onResume();
//添加layout大小发生改变监听器
activityRootView.addOnLayoutChangeListener(this);
}
@Override
public void onLayoutChange(View v, int left, int top, int right,
int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
//old是改变前的左上右下坐标点值,没有old的是改变后的左上右下坐标点值
// System.out.println(oldLeft + " " + oldTop +" " + oldRight + " " + oldBottom);
// System.out.println(left + " " + top +" " + right + " " + bottom);
//现在认为只要控件将Activity向上推的高度超过了1/3屏幕高,就认为软键盘弹起
if(oldBottom != 0 && bottom != 0 &&(oldBottom - bottom > keyHeight)){
Toast.makeText(MainActivity.this, "监听到软键盘弹起...", Toast.LENGTH_SHORT).show();
}else if(oldBottom != 0 && bottom != 0 &&(bottom - oldBottom > keyHeight)){
Toast.makeText(MainActivity.this, "监听到软件盘关闭...", Toast.LENGTH_SHORT).show();
}
}
2 利用OnGlobalLayoutListener
该方法依旧利用adjustResize,其实就是拿到rootView的大小,以此来判断
activity 一定要设置以下属性,否则不生效
android:windowSoftInputMode="adjustResize"
final View view = $(R.id.chat_body);
view.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = view.getRootView().getHeight() - view.getHeight();
// 大于100像素,是打开的情况
if (heightDiff > 100) {
// 如果已经打开软键盘,就不理会
if (keyBoardShown) { return; }
// do something when keyboard show,
// i.e. listView or recyclerView scrolls to bottom
keyBoardShown = true;
return;
}
// 软键盘收起的情况
keyBoardShown = false;
// do something when keyboard hide
}
}
);
作者:granton_zhuang
链接:http://www.jianshu.com/p/b1ed3100ad70
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3 主动询问
但是这种在多布局情况fragment使用众多的情况好像不好使。
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
if(imm.hideSoftInputFromWindow(editText.getWindowToken(), 0))
{
imm.showSoftInput(editText,0);
//软键盘已弹出
}
else
{
//软键盘未弹出
}