开发中需要在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设置弹出键盘与View的交互方式[学习]
  2. 不自动弹出键盘
  3. Android 隐藏显示键盘
  4. Android软键盘softboard(1)
  5. 界面编程之基本界面组件(7)ImageView(图像视图)
  6. Phonegap软键盘遮挡输入框问题
  7. Android自定义视图二:如何绘制内容
  8. android studio 3.6.0 绑定视图新特性的方法

随机推荐

  1. Android(安卓)ClickableSpan 应用实例
  2. Android(安卓)通过handler和message在子
  3. android访问webservice
  4. Android(安卓)恐怖幽灵音效 程序(源码详解
  5. Android剪切板
  6. MeidaProvider 流程学习笔记
  7. Android(安卓)AsyncTask 异步任务取消
  8. Android动态刷新listview中的数据
  9. Not targeting the latest versions of A
  10. 44、头像上传