文档章节

Android监听输入法弹窗的实现

海阔天空玩世不恭
 海阔天空玩世不恭
发布于 2016/11/15 09:36
字数 422
阅读 417
收藏 18
点赞 2
评论 0

输入法弹出界面

用过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)

© 著作权归作者所有

共有 人打赏支持
海阔天空玩世不恭
粉丝 14
博文 50
码字总数 23998
作品 0
成都
程序员
Android源码剖析之Framework层进阶版(Wms窗口管理)

本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 上一篇我们主要讲了Ams,篇幅有限,本篇再讲讲Wms,即WindowManagerService,管理窗口的服务。主要负责窗口的创建、删除、...

liuzxgeek ⋅ 2016/08/26 ⋅ 0

input 输入框被软键盘遮挡问题

1.安卓手机 在软键盘被弹起来的时候输入框不被遮挡,支持性良好 2.ios手机 在软键盘被弹起来的时候输入框被遮挡,体验很不好 在经过多次实验发现,ios手机输入框被弹起的瞬间是不被遮挡的,过...

爱喝水的小熊 ⋅ 06/06 ⋅ 0

咦,我的屏幕脏了——Android悬浮窗初探

作者:不洗碗工作室 - lszr 文章出处:Android声音相关总结 版权归作者所有,转载请注明出处 很多时候,你会想在你的屏幕上加些东西, 比如一个ingress游戏的画图工具,或者在小窗播放视频的同...

不洗碗工作室 ⋅ 04/23 ⋅ 0

项目需求讨论 - WebView下拍照及图片选择功能

前言: 如果觉得掘金上看图片放大看不清楚,可以跳到另外的同步发布的链接看,放大图片下部有个可以查看原图功能,很清楚:项目需求讨论 - WebView下拍照及图片选择功能 现在很多app里面,都...

青蛙要fly ⋅ 前天 ⋅ 0

ReactNative开发的一些经验

ReactNative开发的一些经验 本文主要是本人从Android原生到开发出一套完整的RN模块嵌入原生的经验。 state与props 他们二者是RN的数据核心。state主要是自身数据更新,props主要是父组件传入...

黎伟杰 ⋅ 05/15 ⋅ 0

android 实现本地定时推送(兼容)

首先写几点感悟: 做兼容真的很累很费劲~ android 8.0 广播部分不再支持动态注册,所以应该用service来实现定时推送功能 无论是闹钟还是通知,都得做兼容处理,android 8.0通知必须加channel...

晓乐凡 ⋅ 05/03 ⋅ 0

Android EditText不弹出输入法总结,焦点问题的总结

看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的时候默认弹出输入法,可以这样设置这个属相:android:windowSoftInputMode=stateVisible,这样就会默认...

带梦想一7飞 ⋅ 2013/07/12 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 06/21 ⋅ 0

React Native 进行 Modal 的封装使用

1.背景 在文章例子中的 RN(以下用 RN 表示 React Native )版本是 0.55.0。在项目的开发中,会遇到很多全屏弹窗的使用需求,而 RN 官方也提供了一个这样的组件 Modal。但是在实际使用中,在...

请叫我百米冲刺 ⋅ 04/04 ⋅ 0

android Dialog和Popupwindow,不显示

测试的是华为荣耀平板,在BaseActivity中有个方法,在里面构造dialog或popupwindow,在子类activity中手动点击按钮调用该方法,每次都正常显示弹窗,但是在回调接口中调用基本就不显示,偶尔...

Gowcage ⋅ 06/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 39分钟前 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部