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

作者:海阔天空玩世不恭 时间:2022-06-21 02:58:39 

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)

来源:https://my.oschina.net/u/990728/blog/787880

标签:android,输入法,监听,弹窗
0
投稿

猜你喜欢

  • unity 如何修改材质属性和更换shader

    2023-02-22 12:42:44
  • Android窗口小部件基础编写代码实例

    2022-05-09 20:58:00
  • 最常用的1000个Java类(附代码示例)

    2023-03-25 20:29:07
  • javamail 发送邮件的实例代码分享

    2021-12-22 15:10:47
  • Java多线程的用法详解

    2021-10-29 19:20:59
  • Java concurrency集合之 CopyOnWriteArrayList_动力节点Java学院整理

    2022-10-27 05:03:36
  • Android实现自定义曲线图

    2023-08-22 07:05:01
  • Java Spring详解如何配置数据源注解开发以及整合Junit

    2021-10-31 11:03:25
  • SpringBoot 项目瘦身maven/gradle详解

    2021-10-26 04:39:12
  • 详解Android的.aar文件生成方法以及使用技巧

    2023-08-06 06:43:20
  • java中的前++和后++的区别示例代码详解

    2023-09-01 10:15:01
  • idea中将单个java类导出为jar包文件的方法

    2022-08-18 11:15:55
  • 基于mvc5+ef6+Bootstrap框架实现身份验证和权限管理

    2023-07-08 09:25:22
  • C++中的auto_ptr智能指针的作用及使用方法详解

    2022-04-07 03:01:10
  • Ubuntu中使用VS Code与安装C/C++插件的教程详解

    2023-07-26 08:21:00
  • Java实现在线考试系统与设计(学生功能)

    2021-09-20 11:41:33
  • Java Synchronized锁失败案例及解决方案

    2023-10-25 12:33:47
  • java实现分页显示效果

    2021-12-29 20:17:43
  • 使用JAVA实现http通信详解

    2023-11-12 12:21:12
  • C语言中传值与传指针的介绍与区别

    2023-08-01 15:26:51
  • asp之家 软件编程 m.aspxhome.com