
回复
首先来看效果图,源代码:emoji-panel
实现理论,其实只需要搞明白Component.LayoutRefreshedListener 这个接口的用法就行。
public interface LayoutRefreshedListener {
void onRefreshed(Component var1);
}
它的意思是,当屏幕上的布局发生变化时,这个接口就会被调用。
比如点击一个TextField,打开软键盘后,屏幕的可视区域变小了,这时也会触发布局变化的事件
所以我们可以用它来监听软键盘的状态,是打开还是关闭。
用第一个聊天界面来说明,具体理论实现可分为4个步骤:
1,监听键盘的状态,如果打开,则获取软键盘的高度
2,获取聊天界面的根布局的高度 - 键盘的高度 = 内容的高度
3,将内容的高度重新设置到相关的Component上
4,如果软键盘关闭后,则将相关的Component上的高度释放掉(设置为初始状态)
具体代码实现:
1,建基础类BasePanelLayout,实现Component.LayoutRefreshedListener接口中的如下函数(所有不同样式的EmojiPanel都继承它),用监听软键盘是否打开
2,计算ListContainer的高度,先看聊天界面的布局
3,软键盘打开后,将计算出的高度设置到ListContainer布局上.
4,键盘关闭后,设置为初始时的配置
以上代码是结合聊天的界面进行说明的,需要先清楚界面的布局,然后去根据实际情况去做调整.