zoukankan      html  css  js  c++  java
  • 关于项目中很多键盘无故弹出或无隐藏的总结

    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; }
    });
  • 相关阅读:
    UML类图(上):类、继承和实现
    Maven实战:Maven生命周期
    MyBatis6:MyBatis集成Spring事物管理(下篇)
    MyBatis5:MyBatis集成Spring事务管理(上篇)
    Spring7:基于注解的Spring MVC(下篇)
    Spring6:基于注解的Spring MVC(上篇)
    Spring5:@Autowired注解、@Resource注解和@Service注解
    Dubbo学习小记
    Maven入门详解
    MyBatis4:动态SQL
  • 原文地址:https://www.cnblogs.com/widgetbox/p/7515585.html
Copyright © 2011-2022 走看看