Android监听输入法弹窗和关闭的实现方法

 更新时间:2016年11月15日 14:37:01   作者:海阔天空玩世不恭  
用过ios的都知道ios上输入法关闭的同时会自动关闭输入框,那么在android上如何实现监听输入法弹出和关闭呢?接下来通过本文给大家分享一种可靠的实现方式

用过ios的都知道ios上输入法关闭的同时会自动关闭输入框,那么在android上如何实现监听输入法弹出和关闭呢?本篇文章就为你提供了一种可靠的实现方式。

演示效果视频地址

首先在AndroidManifest中配置

android:windowSoftInputMode="adjustResize"

这样每次输入法弹出和关闭都会重新计算高度实现把布局顶上去的效果

然后我们要自定义一个布局,监听布局大小变化

public class CheckSoftInputLayout extends FrameLayout {
private OnResizeListener mOnResizeListener;
public CheckSoftInputLayout(Context context) {
super(context);
}
public CheckSoftInputLayout(Context context, AttributeSet attrs) {
super(context, attires);
}
public CheckSoftInputLayout(Context context, AttributeSet attrs, int 
defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(21)
public CheckSoftInputLayout(Context context, AttributeSet attrs, int
defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, old);
if (mOnResizeListener != null) {
mOnResizeListener.onResize(w, h, oldw, old);
}
}
public void setOnResizeListener(OnResizeListener listener) { 
this.mOnResizeListener = listener;
}
public interface OnResizeListener {
void onResize(int w, int h, int oldw, int old);
}
}

然后把上面的自定义布局作为跟布局放到你需要的Activity中去,然后在Activity中绑定监听事件

mRootLayout.setOnResizeListener(this);
@Override
public void onResize(int w, int h, int oldw, int oldh) {
//如果第一次初始化
if (oldh == 0) {
return;
}
//如果用户横竖屏转换
if (w != oldw) {
return;
}
if (h < oldh) {
//输入法弹出
} else if (h > oldh) {
//输入法关闭
setCommentViewEnabled(false, false);
}
int distance = h - old;
EventBus.getDefault().post(new InputMethodChangeEvent(distance,mCurrentImageId));
}

这样只要输入法弹出和关闭就能自动实现监听,达到关闭输入框的效果,这样就和苹果的体验很一致。 到这里就介绍完了,如果有什么好的思路,也欢迎评论分享点赞! [Github demo地址](https://github.com/gupengcheng/CheckSoftInputDemo)

相关文章

  • Android Crash与ANR详细介绍

    Android Crash与ANR详细介绍

    对于Android开发的人来说,想必对Crash和ANR这俩都不陌生,并且都对其恨之入骨,因为它俩的产生会大大影响用户体验。所以,在此,结合本人的开发经验,对其做个总结
    2022-11-11
  • 谈谈Android的三种网络通信方式

    谈谈Android的三种网络通信方式

    Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口)、Org.apache接口和Android.net.*(Android网络接口)。本文详细的介绍,有兴趣的可以了解一下。
    2017-01-01
  • Android开发中实现IOS风格底部选择器(支持时间 日期 自定义)

    Android开发中实现IOS风格底部选择器(支持时间 日期 自定义)

    这篇文章主要介绍了Android开发中实现IOS风格底部选择器(支持时间 日期 自定义)的相关资料,需要的朋友可以参考下
    2016-11-11
  • 导致adb无法启动的5种情况和解决方法

    导致adb无法启动的5种情况和解决方法

    这篇文章主要介绍了导致adb无法启动的5种情况和解决方法,本文列举了最常见的5种情况和对应解决方法,需要的朋友可以参考下
    2015-04-04
  • 详解Android项目多服务端接口适配(超简单)

    详解Android项目多服务端接口适配(超简单)

    这篇文章主要介绍了Android项目多服务端接口适配(超简单),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Android6.0编程实现双向通话自动录音功能的方法详解

    Android6.0编程实现双向通话自动录音功能的方法详解

    这篇文章主要介绍了Android6.0编程实现双向通话自动录音功能的方法,结合实例形式分析了Android录音功能的原理、实现技巧与相关注意事项,需要的朋友可以参考下
    2017-07-07
  • SpringBoot实现短信验证码登录功能(案例)

    SpringBoot实现短信验证码登录功能(案例)

    这篇文章主要介绍了SpringBoot实现短信验证码登录功能,本文通过实例代码给大家介绍的非常详细,对大家大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-08-08
  • 详解Gradle构建过程

    详解Gradle构建过程

    Gradle是项目构建工具,是Google官方推荐的Android项目编译工具。构建工具是可以让开发者以可执行和有序的任务来表达自动化的需求。就是将源代码生成可执行程序。本文将详细介绍Gradle构建过程
    2021-06-06
  • Android开发笔记之:复写按钮方法

    Android开发笔记之:复写按钮方法

    本篇文章是对Android中复写按钮方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Android仿QQ列表滑动删除操作

    Android仿QQ列表滑动删除操作

    这篇文章主要为大家详细介绍了Android仿QQ列表滑动删除操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08

最新评论