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; }
    });
  • 相关阅读:
    云计算下一浪潮,腾讯云抢占 Serverless 制高点
    Serverless + GitHub Actions 完美自动化部署静态网站
    Serverless 技术在格灵深瞳的落地实践
    万物皆可 Serverless 之我的 Serverless 之路
    LeetCode 哈希表 136:只出现一次的数字(计数哈希表,异或)
    Spring 01 IOC
    LeetCode 数组:1.两数之和 11. 盛最多水的容器
    LeetCode 链表:21合并两个有序链表 19删除链表的倒数第N个节点
    Maybatis的一些总结(三:增删改查)
    Maybatis的一些总结(一:了解)
  • 原文地址:https://www.cnblogs.com/widgetbox/p/7515585.html
Copyright © 2011-2022 走看看