公司要做一款类似微信的即时通讯app 现有如下需求:
当edittext获取到焦点,弹出输入框,并且将listview(recyclerview)顶上去 类似微信QQ的效果,如下图所示
editText获取焦点后
我试了如下几种方法
配置当前的Activity android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
缺点:listview(recyclerview)不会被顶上去
在1的基础上,当软键盘弹出的时候 发送延迟消息把 recyclerView 滚动到底部
mHandler.postDelay()
layoutManager.setStackFromEnd(true); // 滚动到底部
缺点: 有时候滚不到底部 没效果
配置当前的Activity android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
缺点: 底部输入栏部分被挡住 软键盘会顶到光标的高度 如图
在3的基础上 修改editText的属性, 去掉所有margin值 增加paddingbottom
基本可行..底部栏还是有部分会被挡住
缺点: editText 太高了 与设计稿要求高度不符合
各位乡亲父老 即时通讯这块应该很多人做过吧...求指点啊啊啊
最后贴一下布局文件
除了配置当前的Activity android:windowSoftInputMode="stateVisible|adjustResize"
外,还需要:
listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
The list will automatically scroll to the bottom when a data set change notification is received and only if the last item is already visible on screen.
这样listview就根据key board的弹出/隐藏而自动滚动了。
recyclerview没有找到类似的API.