没有合适的资源?快使用搜索试试~ 我知道了~
Android编程之ListView和EditText发布帖子隐藏软键盘功能详解
0 下载量 91 浏览量
2021-01-20
09:17:09
上传
评论
收藏 71KB PDF 举报
温馨提示
试读
2页
本文实例讲述了Android编程之ListView和EditText发布帖子隐藏软键盘功能。分享给大家供大家参考,具体如下: 在Android开发中,手动调用软件盘的隐藏和显示有时候也是非常常见的需求。 EditText控件实现了点击打开软键盘输入功能,but why ? 为什么EditText可以点击弹出keyboard,而TextView却不可以,EditText继承TextView做了哪些修改呢?关于这些问题得查看相关具体代码如何实现可以参考,看似简单的控件其实系统封装实现的很复杂。这里告诫和我一样一路自学android的开发者善于思考事件背后的本质,共勉。 开发有个布局是最外层是Fra
资源详情
资源评论
资源推荐
Android编程之编程之ListView和和EditText发布帖子隐藏软键盘功能发布帖子隐藏软键盘功能
详解详解
本文实例讲述了Android编程之ListView和EditText发布帖子隐藏软键盘功能。分享给大家供大家参考,具体如下:
在Android开发中,手动调用软件盘的隐藏和显示有时候也是非常常见的需求。
EditText控件实现了点击打开软键盘输入功能,but why ? 为什么EditText可以点击弹出keyboard,而TextView却不可
以,EditText继承TextView做了哪些修改呢?关于这些问题得查看相关具体代码如何实现可以参考,看似简单的控件其实系统
封装实现的很复杂。这里告诫和我一样一路自学android的开发者善于思考事件背后的本质,共勉。
开发有个布局是最外层是FrameLayout,包裹了ListView,bottom底部是个edit输入框,当点输入框打开keyboard时候,需要下
滑listView隐藏keyboard,但上滑继续滑动listView。
刚开始,我尝试了给listview设置clickListener,设置onScrollListener,重写它的onTouchEvent方法,但是发现并不能达到自
己满意的效果(发现code有段时间了,自己都有种修改代码不修改自己满意为止不罢休的纠结感)。
为什么不满意,因为每次listview滑动的时候调用hide keyboard会导致listview闪一下重影现象,因为listview正在滑动调用了
hide keyboard,并且Activity设置的是adjustResize会重新onLayout整个布局。(PS:之前也纠结过这个问题,adjustResize
属性导致底部的Edit没有跟着keyboard移动,而是等keyboard打开后Edit在layout到合适的位置了。最后总结出的问题是需要
调整布局,并且用adjustPan属性,相信类似微信聊天界面肯定也是这样做的,有更好的办法欢迎留言探讨!)
重新了最外层的FrameLayout的onInterceptTouchEvent拦截touch方法。直接贴代码了
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
//键盘开 && 第一个scroll dy》0
if(showSoftInput) {
if(mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
mVelocityTracker.addMovement(ev);
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
downY = (int) ev.getY();
showDispatchTouch = true;
break;
case MotionEvent.ACTION_MOVE:
if(downY > ev.getY()) {
showDispatchTouch = true;
} else {
showDispatchTouch = false;
mVelocityTracker.computeCurrentVelocity(1000);
if(mVelocityTracker.getYVelocity() > 200 && mContext instanceof ActivityReplyDetail) {
((ActivityReplyDetail)mContext).hideSoftInput();
}
}
break;
default:
break;
}
}
return !showDispatchTouch || isAnimating || super.onInterceptTouchEvent(ev);
}
当然这里只有当keyboard弹出的时候才能拦截touch方法了,所以就要检测keyboard是否已弹出。如何检测
mReplyEditLayout.addOnLayoutChangeListener(new OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right,
int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
if(!mOrientationChanged) {
if(top > oldTop) {
if(!mEditTouchedFlag)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
//键盘隐藏
mSoftInputShow = false;
mPullToNextLayout.setDispatchTouch(true);
mPullToNextLayout.setIsShowSoftInput(false);
} else if (top < oldTop) {
//键盘显示
mSoftInputShow = true;
mPullToNextLayout.setIsShowSoftInput(true);
weixin_38622777
- 粉丝: 5
- 资源: 938
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- Docker在Ubuntu16.04上安装和部署Apache Storm
- test_kong.zip
- springboot权限验证学习-下
- SeetaFace6人脸质量评估C++代码实现Demo
- OCAuxiliaryTools
- 制药公司QC顶岗实习专题报告
- Rust 全面指南:从基础到高级,一网打尽 Rust 的编程知识
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0