开发中需要在Activity中监听Android设备的软键盘弹起与关闭,Android貌似没有提供相关的的监听API,在网上找了一个挺好用的方案https://download.csdn.net/download/l448288137/9211443

代码如下:

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);    }}

调用:

SoftKeyBoardListener.setListener(AppActivity.this, new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {            @Override            public void keyBoardShow(int height) {                Toast.makeText(AppActivity.this, "键盘显示 高度" + height, Toast.LENGTH_SHORT).show();            }            @Override            public void keyBoardHide(int height) {                Toast.makeText(AppActivity.this, "键盘隐藏 高度" + height, Toast.LENGTH_SHORT).show();            }        });

更多相关文章

  1. android EditText 属性
  2. ImageView的属性android:scaleType,即ImageView.setScaleType(Ima
  3. 相对布局控制控件居右显示
  4. android xlistview
  5. android TextSwitcher
  6. Android(安卓)Button在中间显示
  7. android 中让activity全屏幕显示
  8. android AlertDialog自定义全屏显示
  9. Android(安卓)长按setOnItemLongClickListener 显示context Menu

随机推荐

  1. Linux 64位下Oracle 12CR2安装(二)
  2. Linux命令-定时任务命令:crontab
  3. linux3.1内核移植到S3C2416的过程和问题
  4. 10.32/10.33 rsync通过服务同步 10.34 li
  5. linux watch——重复执行同一命令
  6. linux 创建子进程
  7. linux diff(differential) 命令详解
  8. Linux串口应用编程
  9. Linux编程(8)_文件IO
  10. 用cmake与OpenCV对ARM进行交叉编译