Android监听键盘弹出收起

Posted SingleShu888

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android监听键盘弹出收起相关的知识,希望对你有一定的参考价值。

在日常需求中,有一个需要监听键盘得需求,监听键盘得方案有很多,网上出现得有自定义view,监听layout重新布局,查看位置变化,来键盘确定是否弹出。也有使用ViewTreeObserver.OnGlobalLayoutListener,监听根布局得大小变化,究其根本都是监听控件高度变化。在网上溜达了一圈,觉得以下得封装还不错,直接使用。200px左右变化,视作键盘弹出。这个阈值可改,根据屏幕百分比来调节等等都可以。

**

【鬼刀镇贴】

**

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();
 		Rect r = new Rect();
        rootView.getWindowVisibleDisplayFrame(r);
        rootViewVisibleHeight = r.height();
        //监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变
        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();
            
        );

出处:https://blog.csdn.net/auccy/article/details/80664234
https://download.csdn.net/download/l448288137/9211443

以上是关于Android监听键盘弹出收起的主要内容,如果未能解决你的问题,请参考以下文章

Android监听键盘弹出收起

Android监听键盘弹出收起

移动端软键盘弹出影响页面布局(iOS软键盘取消后,页面没有恢复),移动端软键盘监听(弹出,收起),及影响定位布局的问题

移动端H5监听键盘弹出和收起

js 监听手机端键盘弹出和收起事件

android如何实现监听软键盘收起按钮的点击事件