软件编程
位置:首页>> 软件编程>> Android编程>> Android监听输入法弹窗和关闭的实现方法

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

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

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

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

0
投稿

猜你喜欢

  • 本文实例为大家分享了Android自定义View实现简易画板的具体代码,供大家参考,具体内容如下自定义VIew实现简易画板效果,功能包括清空
  • 1. 日志的作用日志是程序的重要组成部分,在程序报错的时候,如果我们不看日志,是很难排查出错误的,除非你真的是很有经验.所以日志最主要的作用
  • 1.加入jackson的jar包2.在响应的方法上加上@ResponseBody:把java对象转化为json对象3.方法的返回值可以是对象
  • 程序如下: public static string 英汉(string english,翻译结果 一个或多个) { string 英汉辞典
  • 对于某些程序,我们只允许它使用某些特定端口、网络类型或者特定IP类型等信息。这时候,需要使用到防火墙里面的“高级设置”,创建某些特定的入站或
  • java8的stream流能完美解对象集合去重问题. List<UserCar> list1 = new ArrayList()
  • 本文实例讲述了C#图像边缘检测(Roberts)的方法。分享给大家供大家参考。具体如下://定义roberts算子函数private sta
  • 背景Java是一种流行的编程语言,验证码是一种常用的网络安全技术。Java发展至今,网上也出现了各种各样的验证码,本人初学Java,下面是我
  • 当游戏在手机/模拟器上卡死,logcat没有日志输出,也没有卡死堆栈信息或者bugly也没有捕获到异常,你是否很焦急?本文介绍一下我们项目中
  • 本文实例为大家分享了C# Winform实现进度条显示的具体代码,供大家参考,具体内容如下创建一个窗体,命名为StartForm添加一个ti
  • 目录1、基本语法2、标识符(合法的变量名)3、关键字(保留字)4、注释5、Java 包5.1 package 语句5.2 import 语句
  • 什么是字符串字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s=“a1a2···an”(n>=0)。它是编程
  • Java关键字及其作用一、 总览:访问控制private protected public类,方法和变量修饰符abstract class
  • 一个请求从客户端发出到达服务器,然后被处理的整个过程其实是非常复杂的。本博客主要介绍请求到达服务器被核心组件DispatcherServle
  • 一个好的app 异常处理机制 我认为应该至少包含以下几个功能:1.能把错误信息上传到服务器  让开发者可以持续改进app2.错误信
  • 在日常的开发中、我们都知道,Java的内存清理是通过垃圾回收器进行的,那么其是如何将没用的对象被被清理掉的呢?Java 语言的内存自动回收称
  • 需求:按照起始日期查询出数据库里一段连续日期的住院信息。问题:数据库里的住院信息可能不是完整的,也就是在给出的日期区间里只有若干天的数据,缺
  • C#反射技术主要基于System.Type类和System.Reflection.Assemble类,通过Type类可以访问关于任何数据类型
  • 本文实例为大家分享了C#实现猜数字游戏具体代码,供大家参考,具体内容如下给定一个0-100的随机数字猜其大小题目样式:电脑产生一个0到100
  • 一、实现方式@ConfigurationProperties 注解(最好加上前缀prefix=“person”,标明是和配置文件中哪个开头的
手机版 软件编程 asp之家 www.aspxhome.com