Android监听键盘弹出收起
来源:互联网 发布:51单片机控制舵机 编辑:程序博客网 时间:2024/05/22 02:17
图1 启动界面 图2 未监听键盘弹起 图3 监听键盘弹起
如图app的登录界面输入账号密码的时候,让登录按钮露出来可以方便用户操作。所以有必要监听键盘弹出收起。需要了解:Activity的android:windowSoftInputMode属性【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示【C】stateHidden:用户选择activity时,软键盘总是被隐藏【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的【E】stateVisible:软键盘通常是可见的【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分 搜到的一些监听键盘的方法必须要windowSoftInputMode属性为adjustResize时才可以用。这个方法不适用与app全屏显示(全屏时布局大小并不会改变)。这个方法主要是实现OnLayoutChangeListener接口。
参考链接
最终在csdn找到一个类,可以实现监听键盘弹出收起,不用考虑windowSoftInputMode属性与Activity是否全屏。
下载链接
softkeyboardlistener类:
package com.ljh.softkeyboardlistener;import android.app.Activity;import android.graphics.Rect;import android.view.View;import android.view.ViewTreeObserver;import android.widget.Toast;/** * Created by liujinhua on 15/10/25. */public class SoftKeyBoardListener { private View rootView;//activity的根视图 int rootViewVisibleHeight;//纪录根视图的显示高度 private OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener; public SoftKeyBoardListener(Activity activity) { //获取activity的根视图 rootView = activity.getWindow().getDecorView(); //监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变 rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //获取当前根视图在屏幕上显示的大小 Rect r = new Rect(); rootView.getWindowVisibleDisplayFrame(r); int visibleHeight = r.height(); System.out.println(""+visibleHeight); if (rootViewVisibleHeight == 0) { rootViewVisibleHeight = visibleHeight; return; } //根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变 if (rootViewVisibleHeight == visibleHeight) { return; } //根视图显示高度变小超过200,可以看作软键盘显示了 if (rootViewVisibleHeight - visibleHeight > 200) { if (onSoftKeyBoardChangeListener != null) { onSoftKeyBoardChangeListener.keyBoardShow(rootViewVisibleHeight - visibleHeight); } rootViewVisibleHeight = visibleHeight; return; } //根视图显示高度变大超过200,可以看作软键盘隐藏了 if (visibleHeight - rootViewVisibleHeight > 200) { if (onSoftKeyBoardChangeListener != null) { onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight - rootViewVisibleHeight); } rootViewVisibleHeight = visibleHeight; return; } } }); } private void setOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) { this.onSoftKeyBoardChangeListener = onSoftKeyBoardChangeListener; } public interface OnSoftKeyBoardChangeListener { void keyBoardShow(int height); void keyBoardHide(int height); } public static void setListener(Activity activity, OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) { SoftKeyBoardListener softKeyBoardListener = new SoftKeyBoardListener(activity); softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener); }}
Activity中调用:
SoftKeyBoardListener.setListener(AdjustResizeActivity.this, new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() { @Override public void keyBoardShow(int height) { Toast.makeText(AdjustResizeActivity.this, "键盘显示 高度" + height, Toast.LENGTH_SHORT).show(); } @Override public void keyBoardHide(int height) { Toast.makeText(AdjustResizeActivity.this, "键盘隐藏 高度" + height, Toast.LENGTH_SHORT).show(); } });
这样就可以监听键盘的弹出收起操作了。可以在keyBoardShow与keyBoardHide函数中写入对布局的操作。 图中的效果是把最上面的TextView的Height变小,使登录按钮露出。
3 0
- Android监听键盘弹出收起
- android 监听键盘弹出收起状态
- Android 监听键盘的弹出与关闭,收起
- android 键盘弹起/收起监听
- 键盘弹出监听和点击键盘完键盘收起
- android监听键盘打开收起事件
- android监听键盘弹出
- Android监听软键盘弹出与收起
- Android 软键盘弹出/收起监听
- Android完美检测键盘弹出/收起
- 键盘收起展开监听
- 键盘弹出与收起
- 键盘弹出和收起
- 监听android键盘弹出隐藏
- Android 监听键盘弹出关闭
- iOS 监听键盘的弹出,收起,并且拿到键盘的高度
- android 监听软键盘的弹出和收起
- android实现软键盘弹出/收起的监听
- PageRank算法简述
- 七.闭包
- Redis 有序集合(sorted set)
- fork函数与vfork函数
- [转]HTTP 头部详细解释
- Android监听键盘弹出收起
- js判断打开设备
- Machine Learning: Clustering and Similarity: Retrieving Documents
- shell脚本编写比较两个数的大小
- 运维日记006 - vim操作总结(二、常用命令)
- docker命令详解
- 湘潭oj 1247 Pair-Pair
- 简单的调用第三方XlistView的上拉加载下拉刷新
- POJ - 2823 Sliding Window (单调队列求解区间最值)