项目需求之Android 监听键盘的弹起和隐藏&setVisibility(View.GONE)方法失效
2016-09-07 22:44
387 查看
最近比较忙咯,因为在做密码密码管理模块,所以一直在跟EditText打交道,我也写了几篇跟EditText有关的博客了,今天又遇到需求了,需要监听系统键盘的弹起和隐藏。
需求大致是这样的:
1、当键盘弹起的时候,也就是EditText可以输入的时候,这个时候“编辑”按钮消失,反之显示。
2、当点击“编辑”按钮的时候“编辑”按钮执行一个缩放动画,动画完毕后消失。
先说说我之前监听EditText获取和失去焦点的方法,后面看了EditText源码,被自己蠢哭了,不过也没关系,因为我知道了怎么监听键盘的弹起和隐藏,赚到了哈~!!!
1、监听键盘的弹起和隐藏
因为键盘是系统弹出来的,查阅了官方文档,也没有什么方法是可以监听键盘的弹起和隐藏的,但是通过写上一篇博客 Activity下WindowSoftInputMode属性详解,我们知道,当设置为android:windowSoftInputMode=”stateHidden|adjustResize”的时候,系统总会调整当前界面的布局,从而使输入的内容可见,所以当布局被调整的时候,会回调布局的onLayoutChange方法,所以我们只需要加上监听就可以了。
方法一:
2、监听EditText的焦点变换
3、当觉得自己快完成任务的时候,当做动画然后动画结束让当前View消失的时候发现bug了,setVisibility(View.GONE)方法失效了,
解决方法:
简单点说就是,当一个View执行动画的时候,当前View肯定是可见的,因为如果不可见的话动画也就没有意义了,问题就出在a.setFillAfter(true);这个代码上,因为动画结束的时候肯定是可见的,a.setFillAfter(true);会保持最后一个状态,
我们在这个方法中设置GONE会晚于a.setFillAfter(true);执行,所以会导致mButton.setVisibility(View.GONE);失效,
1、我们把a.setFillAfter(false);设置false
2、在GONE之前清一下动画
OK~!总结完咯,为了弄清原理,苦逼的看了一番View的源码,被Google那群疯子虐哭了,慢慢成长~!!加油~
需求大致是这样的:
1、当键盘弹起的时候,也就是EditText可以输入的时候,这个时候“编辑”按钮消失,反之显示。
2、当点击“编辑”按钮的时候“编辑”按钮执行一个缩放动画,动画完毕后消失。
先说说我之前监听EditText获取和失去焦点的方法,后面看了EditText源码,被自己蠢哭了,不过也没关系,因为我知道了怎么监听键盘的弹起和隐藏,赚到了哈~!!!
1、监听键盘的弹起和隐藏
因为键盘是系统弹出来的,查阅了官方文档,也没有什么方法是可以监听键盘的弹起和隐藏的,但是通过写上一篇博客 Activity下WindowSoftInputMode属性详解,我们知道,当设置为android:windowSoftInputMode=”stateHidden|adjustResize”的时候,系统总会调整当前界面的布局,从而使输入的内容可见,所以当布局被调整的时候,会回调布局的onLayoutChange方法,所以我们只需要加上监听就可以了。
方法一:
findViewById(R.id.id_rl).addOnLayoutChangeListener(this); @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { Log.e("TAG", "onLayoutChange:"); if (oldBottom != 0 && bottom != 0 && (oldBottom - bottom > 0)) { //软键盘弹起 Log.e("TAG", "onLayoutChange: 软键盘弹起"); mButton.setVisibility(View.GONE); } else if (oldBottom != 0 && bottom != 0 && (bottom - oldBottom > 0)) { //当以前的现在的bottom-以前的bottom>0的时候也就是软件盘关闭 Log.e("TAG", "onLayoutChange: 软件盘关闭"); mButton.setVisibility(View.VISIBLE); } }
2、监听EditText的焦点变换
id_edit2= (EditText) findViewById(R.id.id_edit2); id_edit2.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus){ //获取焦点的时候 }else{ //失去焦点的时候 } } });
3、当觉得自己快完成任务的时候,当做动画然后动画结束让当前View消失的时候发现bug了,setVisibility(View.GONE)方法失效了,
a=new ScaleAnimation(0f,1f,0f,1f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); a.setDuration(1000); a.setFillAfter(true); a.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { mButton.setVisibility(View.GONE); } @Override public void onAnimationRepeat(Animation animation) { } }); }
解决方法:
简单点说就是,当一个View执行动画的时候,当前View肯定是可见的,因为如果不可见的话动画也就没有意义了,问题就出在a.setFillAfter(true);这个代码上,因为动画结束的时候肯定是可见的,a.setFillAfter(true);会保持最后一个状态,
public void onAnimationEnd(Animation animation) { mButton.setVisibility(View.GONE); }
我们在这个方法中设置GONE会晚于a.setFillAfter(true);执行,所以会导致mButton.setVisibility(View.GONE);失效,
1、我们把a.setFillAfter(false);设置false
2、在GONE之前清一下动画
mButton.clearAnimation(); mButton.setVisibility(View.GONE);
OK~!总结完咯,为了弄清原理,苦逼的看了一番View的源码,被Google那群疯子虐哭了,慢慢成长~!!加油~
相关文章推荐
- iOS键盘弹起,上移视图,和其它的方法大同小异,只不过我在viewDidLayoutSubviews 中写的改变frame方法,这样就不用监听键盘什么的了
- android view的setVisibility方法值的意思
- stage监听键盘事件被另外的swf加载后失效的解决方法。
- android view的setVisibility方法值的意思
- android 键盘监听EditView时,自定义键盘的确定按钮样式
- android 自定义View在弹出的软键盘之上,以及测量软键盘高度和监听软键盘状态
- android view的setVisibility方法值
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向
- android view的setVisibility方法值的意思
- Android项目:模仿ConvertView原理(ListView的getView方法)对View对象进行回收和复用
- 【Android进阶】Android里webview不支持input file的解决方法(上传按钮点击失效的原因)
- android view的setVisibility方法值的意思
- android view或button的setVisibility方法值的意思
- setvisibility(view.gone)失效问题
- android 属性android:visibility及 view的setVisibility方法值的意思
- android view的setVisibility方法值的意思
- Android项目:模仿ConvertView原理(ListView的getView方法)对View对象进行回收和复用 推荐
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向
- iOS中在tableview上通知控制键盘弹起界面上推的方法
- Android 监听键盘的弹起与收缩