监听键盘弹起、收缩的方法

工具类:

public classSoftKeyBoardListener {

privateViewrootView;//activity的根视图

private introotViewVisibleHeight;//纪录根视图的显示高度

privateOnSoftKeyBoardChangeListeneronSoftKeyBoardChangeListener;

publicSoftKeyBoardListener(Activity activity) {

//获取activity的根视图

rootView= activity.getWindow().getDecorView();

//监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变

rootView.getViewTreeObserver().addOnGlobalLayoutListener(newViewTreeObserver.OnGlobalLayoutListener() {

@Override

public voidonGlobalLayout() {

//获取当前根视图在屏幕上显示的大小

Rect r =newRect();

rootView.getWindowVisibleDisplayFrame(r);

intvisibleHeight = r.height();

if(rootViewVisibleHeight==0) {

rootViewVisibleHeight= visibleHeight;

return;

}

//根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变

if(rootViewVisibleHeight== visibleHeight) {

return;

}

//根视图显示高度变小超过300,可以看作软键盘显示了

if(rootViewVisibleHeight- visibleHeight >200) {

if(onSoftKeyBoardChangeListener!=null) {

onSoftKeyBoardChangeListener.keyBoardShow(rootViewVisibleHeight- visibleHeight);

}

rootViewVisibleHeight= visibleHeight;

return;

}

//根视图显示高度变大超过300,可以看作软键盘隐藏了

if(visibleHeight -rootViewVisibleHeight>200) {

if(onSoftKeyBoardChangeListener!=null) {

onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight -rootViewVisibleHeight);

}

rootViewVisibleHeight= visibleHeight;

return;

}

}

});

}

private voidsetOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {

this.onSoftKeyBoardChangeListener= onSoftKeyBoardChangeListener;

}

public interfaceOnSoftKeyBoardChangeListener {

voidkeyBoardShow(intheight);

voidkeyBoardHide(intheight);

}

public static voidsetListener(Activity activity,OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {

SoftKeyBoardListener softKeyBoardListener =newSoftKeyBoardListener(activity);

softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener);

}

public static voidcloseKeybord(EditText mEditText,Context mContext) {

InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(mEditText.getWindowToken(),0);

mEditText.setFocusable(false);

}

}

使用:

SoftKeyBoardListener.setListener(this,

newSoftKeyBoardListener.OnSoftKeyBoardChangeListener() {

@Override

public voidkeyBoardShow(intheight) {

Log.e("TAG","keyBoardShow: ");

if(setPadding==true) {

scroll.setPadding(0,0,0,height);

scroll.scrollTo(0,0);

}

}

@SuppressLint("WrongConstant")

@Override

public voidkeyBoardHide(intheight) {

scroll.setPadding(0,0,0,0);

scroll.scrollTo(0,0);

}

});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,095评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,876评论 0 17
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,275评论 18 399
  • 1: 获取控件宽高 控件View有getHeight()和getwidth()方法可以获取宽高,但是如果直接在on...
    自由人是工程师阅读 5,873评论 0 0
  • “跃迁”这个词最开始对于我来说是陌生而遥远的,当然对一个认知有限的人,跃迁和停在原地又有什么区别呢? 我很感谢在观...
    暖暖百合花阅读 2,707评论 0 0

友情链接更多精彩内容