关于项目中很多键盘无故弹出或无隐藏的总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于项目中很多键盘无故弹出或无隐藏的总结相关的知识,希望对你有一定的参考价值。

1.activity的键盘问题

当布局中有EditText时,键盘有时会主动弹出影响界面效果,解决方式如下:

在清单文件-Manifest.xml中设定activity的属性

1.键盘的隐藏

android:windowSoftInputMode="stateHidden|stateUnchanged"  

"stateUnspecified"是指软键盘的状态(是否它是隐藏或可见)没有被指定。

"stateHidden" 当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。  

注:

在实际中中遇到一个问题:
在两个页面都有EditText作为搜索框时,进入第二个页面后,键盘始终无法弹出。

给EditText设置属性:

android:focusableInTouchMode="true"

 

另一种在activity设置:

调用隐藏系统默认的输入法

 1.

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(Activity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
PS:(Activity是当前的Activity)

2.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

 

2.键盘的弹出

根据项目需要若设置键盘弹出如下:

android:windowSoftInputMode="stateVisible|adjustResize"

"adjustResize" 该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间(简而言之就是启动该activity时键盘默认弹出)。 

 

 

2.fragment的键盘问题

隐藏软键盘:

方法1:

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

方法2:

  View v = getActivity().getWindow().peekDecorView();
     if (v != null){
        InputMethodManager inputmanger = (InputMethodManager)getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE); inputmanger.hideSoftInputFromWindow(mv.getWindowToken(),
0); }

弹出软键盘:

editText.requestFocus();
InputMethodManager imm =(InputMethodManager)editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
PS:editText.requestFocus()是把焦点放在editText这个控件上。

拓展:
点击其他部位隐藏软键盘
这个时候我们可以通过 onCreateView 返回的view设置它的setOnTouchListener方法具体代码如下:
    view.setOnTouchListener(new OnTouchListener() {

       @Override
       public boolean onTouch(View v, MotionEvent event) {
         View v = getActivity().getWindow().peekDecorView();
         if (v != null){
             InputMethodManager inputmanger = (InputMethodManager)getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE); inputmanger.hideSoftInputFromWindow(mv.getWindowToken(), 0); }
           return false; }
});

 









以上是关于关于项目中很多键盘无故弹出或无隐藏的总结的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中判断软键盘是不是弹出或隐藏

关于Android平台显示隐藏软键盘输入法的方法总结

关于Android平台显示隐藏软键盘输入法的方法总结

Android填坑之旅(第十四篇)关于软键盘弹出未及时隐藏导致自定义View的onMeasure方法测量错误引发的血案

Android填坑之旅(第十四篇)关于软键盘弹出未及时隐藏导致自定义View的onMeasure方法测量错误引发的血案

android键盘弹出问题