java - android弹出输入框,软键盘挡住部分编辑框
伊谢尔伦
伊谢尔伦 2017-04-17 15:49:36
[Java讨论组]

公司要做一款类似微信的即时通讯app 现有如下需求:
当edittext获取到焦点,弹出输入框,并且将listview(recyclerview)顶上去 类似微信QQ的效果,如下图所示

editText获取焦点后


我试了如下几种方法

  1. 配置当前的Activity android:windowSoftInputMode="stateAlwaysHidden|adjustResize"

    缺点:listview(recyclerview)不会被顶上去

  2. 在1的基础上,当软键盘弹出的时候 发送延迟消息把 recyclerView 滚动到底部

    mHandler.postDelay()
    layoutManager.setStackFromEnd(true); // 滚动到底部
    缺点: 有时候滚不到底部 没效果

  3. 配置当前的Activity android:windowSoftInputMode="stateAlwaysHidden|adjustPan"

    缺点: 底部输入栏部分被挡住 软键盘会顶到光标的高度 如图

  4. 在3的基础上 修改editText的属性, 去掉所有margin值 增加paddingbottom
    基本可行..底部栏还是有部分会被挡住
    缺点: editText 太高了 与设计稿要求高度不符合

各位乡亲父老 即时通讯这块应该很多人做过吧...求指点啊啊啊

最后贴一下布局文件




    
        

            
        
        
       
        
    
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
PHPz

除了配置当前的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.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号