监听软键盘 刷新布局视图
来源:互联网 发布:eos utility mac 编辑:程序博客网 时间:2024/06/01 13:11
第一步:
需要在manifest的相应activity中设置android:windowSoftInputMode=”stateHidden|adjustResize”
里面的值很迷糊,备注一下:
【1】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【2】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【3】stateHidden:用户选择activity时,软键盘总是被隐藏
【4】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【5】stateVisible:软键盘通常是可见的
【6】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【7】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【8】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【9】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
第二步:
监听软键盘的弹出和收起,以便更新布局视图。原理是,当软键盘弹出或收起时,根布局的bottom坐标会发生变化,所有给根布局添加addOnLayoutChangeListener监听,当变化超过1/3屏幕高度时,我们视为然键盘发生了弹出或收起。
Activity里的代码,已经加了注释,应该能看懂:
public class LoginActivity extends BaseActivity implements View.OnLayoutChangeListener { private FrameLayout rootView; private int keyHeight; private int ivHeight; private ImageView iv; @Override protected int getLayoutId() { return R.layout.act_login; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); rootView = (FrameLayout) findViewById(R.id.root); iv = (ImageView) findViewById(R.id.imageView); DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); keyHeight = dm.heightPixels / 3; rootView.addOnLayoutChangeListener(this); //添加监听获取宽高 final ViewTreeObserver vto = iv.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { ivHeight = iv.getMeasuredHeight();// 避免重复添加监听 iv.getViewTreeObserver().removeOnGlobalLayoutListener(this); } }); } LinearLayout.LayoutParams lp; @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { LogUtil.e("left=" + left + "----top=" + top + "----right=" + right + "----bottom=" + bottom); LogUtil.e("oldLeft=" + oldLeft + "----oldTop=" + oldTop + "----oldRight=" + oldRight + "----oldBottom=" + oldBottom); if (oldBottom != 0 && bottom != oldBottom) {//排除activity刚进来时的变化,以及没有变化时的情况 //当oldBottom和bottom的变化范围超过1/3屏幕时,我们视为键盘发生的弹出或收起。 if (oldBottom - bottom > keyHeight) {//弹出 ; hideAnim(); } else if (bottom - oldBottom > keyHeight) {//收起 showAnim(); } } } private void hideAnim() { ValueAnimator anim = ValueAnimator.ofInt(ivHeight, 0); anim.setDuration(500); anim.setInterpolator(new DecelerateInterpolator()); anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int value = (int) animation.getAnimatedValue(); if(ivHeight%2==0){ lp = (LinearLayout.LayoutParams) iv.getLayoutParams(); lp.height = value; iv.setLayoutParams(lp); } } }); anim.start(); } private void showAnim() { ValueAnimator anim = ValueAnimator.ofInt(0, ivHeight); anim.setDuration(500); anim.setInterpolator(new AccelerateInterpolator()); anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int value = (int) animation.getAnimatedValue(); if(value==ivHeight||ivHeight%2==0){ lp = (LinearLayout.LayoutParams) iv.getLayoutParams(); lp.height = value; iv.setLayoutParams(lp); } } }); anim.start(); }}
完结。
0 0
- 监听软键盘 刷新布局视图
- 分享一个可以监听软键盘显示隐藏的布局。
- Android监听软键盘,布局上移不遮挡输入框
- 监听软键盘
- android 软键盘监听
- Android软键盘监听
- 监听软键盘回车
- 获得软键盘高度 监听软键盘
- 软键盘顶布局
- Android监听软键盘显示与隐藏状态来动态改变布局
- Android 软键盘监听事件
- Android 监听软键盘状态
- Android软键盘监听事件
- Android 监听软键盘按键
- Android 软键盘监听事件
- android监听软键盘输入@
- Android 软键盘监听事件
- Android 软键盘监听事件
- eclipse+tomcat搭建https环境
- Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]
- React Native环境搭建 (android/mac环境)
- C语言循环链表的实现与操作
- IntelliJ IDEA 主题、字体、编辑区主题、文件编码修改
- 监听软键盘 刷新布局视图
- 20-TCP Bulk Data Flow
- Windows下搭建git服务器
- 浮点数与零比较
- SpannableString与SpannableStringBuilder使用
- C# 如何求两个日期之间的时间
- 1-解析命令行参数-ParseArguments
- 附录
- 知识管理软件之三 代码助手