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监听键盘弹出收起的主要内容,如果未能解决你的问题,请参考以下文章