文档章节

Android监听输入法弹窗的实现

海阔天空玩世不恭
 海阔天空玩世不恭
发布于 2016/11/15 09:36
字数 422
阅读 423
收藏 18

输入法弹出界面

用过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
博文 63
码字总数 23998
作品 0
成都
程序员
私信 提问
Android EditText不弹出输入法总结,焦点问题的总结

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

带梦想一7飞
2013/07/12
0
0
Android中EditTex焦点设置和弹不弹出输入法的问题

 今天编程碰到了一个问题:有一款平板,打开一个有EditText的Activity会默认弹出输入法。为了解决这个问题就深入研究了下android中焦点Focus和弹出输入法的问题。在网上看了些例子都不够全面...

新年
2015/11/11
0
0
Android开发 - 获取系统输入法高度的正确姿势

问题与解决 在Android应用的开发中,有一些需求需要我们获取到输入法的高度,但是官方的API并没有提供类似的方法,所以我们需要自己来实现。 查阅了网上很多资料,试过以后都不理想。 比如有...

猴亮屏
11/01
0
0
Android WebView基本使用

WebView介绍 Android WebView在Android平台上是一个特殊的View, 基于webkit引擎、展现web页面的控件,这个类可以被用来在你的app中仅仅显示一张在线的网页,还可以用来开发浏览器。WebView...

临江仙卜算子
07/06
0
0
Android 与 WebView 数据交互

1. 创建Android 项目 打开Android Studio 创建一个空的Android项目 打开Android虚拟机,这里使用的是Genymotion 2. 添加webview 清空layout内容,添加WebView控件 此时运行项目,发现android...

塔歌
07/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

二十分钟教你如何将区块链应用与函数计算相结合

前言 本篇文章适合对区块链应用感兴趣或是想要通过函数计算服务进一步开发区块链应用的新人。本文将结合阿里云区块链服务、阿里云函数计算服务、阿里云日志服务 以及社区应用 Marbles,手把手...

阿里云官方博客
4分钟前
0
0
Double数相加后结果不准确

在我们进行两个double运算时,例如:2..0-1.1 不是想象的输出0.9,而是0.89999999999999999。其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1/10。这就好像十...

嘴角轻扬30
12分钟前
0
0
去除移动端点击效果

移动端点击时,会有一个类似active的短暂背景淡出效果,去除该效果可使用 -webkit-tap-highlight-color: rgba(255, 0, 0, 0);

originDu
13分钟前
0
0
腾讯云与MariaDB 基金会签署战略合作,共建全球开源生态圈

本文由云+社区发表 腾讯云日前与MariaDB基金会正式签署战略合作协议,2019年,腾讯云将继续以白金会员身份为基金会的发展提供强有力的资源支持,与MariaDB全球用户和开发者一道,共建开放共赢...

腾讯云加社区
18分钟前
1
0
Kotlin的SAM(Single Abstract Method)

今天有人在群里问kotlin支持SAM的问题,其实kotlin不支持SAM,因为人家支持FP(function programing) package reactinterface Test { fun print()}class TestInterface(var...

SuShine
19分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部