原文:https://blog.csdn.net/auccy/article/details/80664234 

 

 

开发中需要在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();
            }
        });

————————————————
版权声明:本文为CSDN博主「auccy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/auccy/article/details/80664234

 

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

 

更多相关文章

  1. Android View视图绘制
  2. 【Android资料】Android软键盘显示模式总结
  3. Android Studio 之一个项目的不同视图结构
  4. android之CalendarView日历视图
  5. Android键盘“enter”键设置为“下一项”失效解决办法
  6. WebView高度自适应方案探究
  7. Android中软键盘弹出时底部布局上移问题

随机推荐

  1. Android(安卓)中关于 【Cursor】 类的介
  2. Android中MQTT协议的使用
  3. Android(安卓)中的 framebuffer
  4. Android文件访问权限
  5. Android(安卓)Recycleview的侧滑删除加上
  6. 一个特别适合新手练习的Android小项目—
  7. android 中在activity弹出一个对话框,并
  8. 调用对象[置顶] Android通过调用Webservi
  9. Android(安卓)UI之ProgressBar
  10. android中push机制实现:搭建XMPP协议,实现