美文网首页
Android-->键盘表情切换的终极解决方案

Android-->键盘表情切换的终极解决方案

作者: angcyo | 来源:发表于2017-04-27 08:51 被阅读126次

    之前写过一篇文章 Android-->如何优雅的切换表情和键盘(原理), 没有看多的可以看看.

    这个方案有一个问题, 当状态栏透明的时候, 就会出现问题. 而且也不支持在Dialog中使用.

    实现方式也很简单, 但是代码逻辑很复杂, 不容易修改. 一不小心就会出错, 还找不到原因.

    今天这篇文章, 让你焕然一新. 完全颠覆之前的方案.

    前提,2个属性

    android:windowSoftInputMode="adjustResize"
    android:fitsSystemWindows="true"


    会出现的坑:
    如果通过简单的onSizeChange回调, 处理键盘弹出. 那么当状态栏透明之后, 这个方法是不会回调的.

    因为, 当状态栏透明之后, 这个时候你的API已经满足了>=20. 这个时候:onApplyWindowInsets 此方法正好就是API 20的时候加入进来的.

    从20开始, 系统改变了键盘弹出时, 布局的响应属性, 从原来的Height变化, 变成了最新的Padding变化.

    也就是: 原来键盘弹出的时候, Layout的高度会变为原来的高度-键盘的高度;
    而现在: Layout的高度不变, 但是PaddingBottom会变为键盘的高度.

    这样就会导致onSizeChanged不会回调, 因为高宽都一样.

    如果此时, 你要对不同的系统版本最适配, 提供对应的解决方案的话....那么,你将走向一条不归路.

    其实,聪明的你, 应该也能想出解决方法.


    以下是我的方案:

    1:onMeasure
    在测量内容高度和表情高度的时候, 根据键盘是否弹出, paddingBottom是否为空, 布局的height是否有变化.

    决定内容的高度, 和 表情的高度. 主要是一定要确定内容的高度(要考虑键盘).

    2:onLayout
    有了高度, 就可以摆放内容布局和表情布局.

    其实只要内容布局摆放合理, 表情布局在键盘弹出的时候可以任意摆放. 只要不影响内容就行.


    就这么简单,

    https://github.com/angcyo/ExKeyboardDemo

    相关文章

      网友评论

          本文标题:Android-->键盘表情切换的终极解决方案

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