美文网首页
聊聊软键盘的那些事

聊聊软键盘的那些事

作者: Wang_Mr | 来源:发表于2018-05-09 16:44 被阅读0次
onDestroy进行调用防止内存泄漏
    /**
     * 解决InputMethodManager内存泄露现象
     */
    private static void fixInputMethodManagerLeak(Context destContext) {

        if (destContext == null)
            return;

        InputMethodManager imm = (InputMethodManager) destContext.getSystemService(Context.INPUT_METHOD_SERVICE);

        if (imm == null)
            return;

        String[] arr = new String[]{"mCurRootView", "mServedView", "mNextServedView"};
        Field f;
        Object obj_get;
        for (String param : arr) {
            try {
                f = imm.getClass().getDeclaredField(param);
                if (!f.isAccessible()) {
                    f.setAccessible(true);
                } // author: sodino mail:sodino@qq.com
                obj_get = f.get(imm);
                if (obj_get != null && obj_get instanceof View) {
                    View v_get = (View) obj_get;
                    if (v_get
                            .getContext() == destContext) { // 被InputMethodManager持有引用的context是想要目标销毁的
                        f.set(imm, null); // 置空,破坏掉path to gc节点
                    } else {
                        // 不是想要目标销毁的,即为又进了另一层界面了,不要处理,避免影响原逻辑,也就不用继续for循环了
                        /*if (QLog.isColorLevel()) {
                            QLog.d(ReflecterHelper.class.getSimpleName(), QLog.CLR, "fixInputMethodManagerLeak break, context is not suitable, get_context=" + v_get.getContext()+" dest_context=" + destContext);
                        }*/
                        break;
                    }
                }
            } catch (Throwable t) {
                t.printStackTrace();
            }
        }
    }
②键盘遮挡EditText

假如EditText 基本贴近屏幕底部,弹出软键盘是会遮挡住EditText所填写的内容 ,如果清单文件设置windowSoftInputMode:adjustPan 则会把toolbar顶出屏幕

<1>用ScrollView进行包裹Edittext

<LinearLayout ... >
    <Toolar ... />
    <ScrollView ... >
        <Edittext ... />
        ... 
    </ScrollView>
</LinearLayout>

<2>在根布局的layout下设置android:fitsSystemWindows="true"
<3>如果设置了状态栏透明,需要自定义了一个根布局并设置android:fitsSystemWindows="true"

// extends LinearLayout、RelativeLayout等写法一样
public class SoftInputLinearLayout extends LinearLayout {

    private int[] mInsets = new int[4];

    public SoftInputLinearLayout(Context context) {
        super(context);
    }

    public SoftInputLinearLayout(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }


    @Override
    public WindowInsets computeSystemWindowInsets(WindowInsets in, Rect outLocalInsets) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // Intentionally do not modify the bottom inset. For some reason,
            // if the bottom inset is modified, window resizing stops working.
            // TODO: Figure out why.

            mInsets[0] = outLocalInsets.left;
            mInsets[1] = outLocalInsets.top;
            mInsets[2] = outLocalInsets.right;

            outLocalInsets.left = 0;
            outLocalInsets.top = 0;
            outLocalInsets.right = 0;
        }

        return super.computeSystemWindowInsets(in, outLocalInsets);

    }

    @Override
    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
            mInsets[0] = insets.getSystemWindowInsetLeft();
            mInsets[1] = insets.getSystemWindowInsetTop();
            mInsets[2] = insets.getSystemWindowInsetRight();
            return super.onApplyWindowInsets(insets.replaceSystemWindowInsets(0, 0, 0,
                    insets.getSystemWindowInsetBottom()));
        } else {
            return insets;
        }
    }
}

相关文章

  • 聊聊软键盘的那些事

    ①onDestroy进行调用防止内存泄漏 ②键盘遮挡EditText 假如EditText 基本贴近屏幕底部,弹出...

  • 聊聊那些事

    从昨天反思后很久没有入睡,不知道从什么时候开始我对一切事物没有了耐心,看剧喜欢快进,因此更喜欢刷电影。在很多...

  • Android 软键盘的那些事

    android:windowSoftInputModeactivity主窗口与软键盘的交互模式,可以用来避免输入法...

  • 聊聊那些减肥的事

    有的时候你拼命尝试,但体重却不怎么下降。终于累死累活瘦了下来,一顿饭就让你反弹了10斤!这是怎么回事?常见错误减肥...

  • 聊聊,点评的那些事

    欲穷千里目,你就去点评;生命诚可贵,点评价更高;天下武功,唯快不破;天下文章,唯评不活;朝辞白帝彩云间,千里江凌点...

  • 聊聊年龄的那些事

    最近《北京女子图签》热播,来自四川小城的陈可在北京孤身闯荡,经历着职场、爱情、人情诸方面的挫折和无奈。25岁的她又...

  • 聊聊Promise的那些事

    Promise是什么? Promise从含义上讲,它是一个异步操作的解决方案,从语法本质上讲,它就是一个构造函数,...

  • 聊聊读书的那些事

    昨天扒了扒自己要看的书,不数不知道,一数吓一跳,足足有十几天本!主要分为两类,一类是心理学类书籍,一类是中医类书籍...

  • 聊聊失眠的那些事!

    失眠,真心是件很痛苦的事,比如现在,凌晨两点了,我还是怎么也无法入睡。 翻来覆去的,越是想赶紧睡着,越是陷入焦躁。...

  • 聊聊减肥的那些事

    因为做餐饮的行业,碰到很多有意向减肥的人群对饮食减肥都存有不同的误区。今天就来聊聊怎样科学的减肥。 肥胖的成因...

网友评论

      本文标题:聊聊软键盘的那些事

      本文链接:https://www.haomeiwen.com/subject/ykynrftx.html