文档章节

软键盘打开/收起的监听

先进青年
 先进青年
发布于 2018/02/04 16:10
字数 283
阅读 26
收藏 0

废话少说直接上代码:

import android.graphics.Rect;
import android.view.View;
import android.view.ViewTreeObserver;

import java.util.LinkedList;
import java.util.List;

/*

 * Description: 

 * File: SoftKeyboardStateHelper.java

 * Author: k

 * Version: V100R001C01

 * Create: 2018/2/4 14:50

 *

 * Changes (from 2018/2/4)

 * -----------------------------------------------------------------

 * 2018/2/4 : Changes SoftKeyboardStateHelper.java (k);

 * -----------------------------------------------------------------

 */
public class SoftKeyboardStateHelper implements ViewTreeObserver.OnGlobalLayoutListener {

    public interface SoftKeyboardStateListener {
        void onSoftKeyboardOpened(int keyboardHeightInPx);
        void onSoftKeyboardClosed();
    }

    private final List<SoftKeyboardStateListener> listeners = new LinkedList<SoftKeyboardStateListener>();
    private final View activityRootView;
    private int        lastSoftKeyboardHeightInPx;
    private boolean    isSoftKeyboardOpened;

    public SoftKeyboardStateHelper(View activityRootView) {
        this(activityRootView, false);
    }

    public SoftKeyboardStateHelper(View activityRootView, boolean isSoftKeyboardOpened) {
        this.activityRootView     = activityRootView;
        this.isSoftKeyboardOpened = isSoftKeyboardOpened;
        activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(this);
    }

    @Override
    public void onGlobalLayout() {
        final Rect r = new Rect();
        //r will be populated with the coordinates of your view that area still visible.
        activityRootView.getWindowVisibleDisplayFrame(r);

        final int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
        if (!isSoftKeyboardOpened && heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
            isSoftKeyboardOpened = true;
            notifyOnSoftKeyboardOpened(heightDiff);
        } else if (isSoftKeyboardOpened && heightDiff < 100) {
            isSoftKeyboardOpened = false;
            notifyOnSoftKeyboardClosed();
        }
    }

    public void setIsSoftKeyboardOpened(boolean isSoftKeyboardOpened) {
        this.isSoftKeyboardOpened = isSoftKeyboardOpened;
    }

    public boolean isSoftKeyboardOpened() {
        return isSoftKeyboardOpened;
    }

    /**
     * Default value is zero (0)
     * @return last saved keyboard height in px
     */
    public int getLastSoftKeyboardHeightInPx() {
        return lastSoftKeyboardHeightInPx;
    }

    public void addSoftKeyboardStateListener(SoftKeyboardStateListener listener) {
        listeners.add(listener);
    }

    public void removeSoftKeyboardStateListener(SoftKeyboardStateListener listener) {
        listeners.remove(listener);
    }

    private void notifyOnSoftKeyboardOpened(int keyboardHeightInPx) {
        this.lastSoftKeyboardHeightInPx = keyboardHeightInPx;

        for (SoftKeyboardStateListener listener : listeners) {
            if (listener != null) {
                listener.onSoftKeyboardOpened(keyboardHeightInPx);
            }
        }
    }

    private void notifyOnSoftKeyboardClosed() {
        for (SoftKeyboardStateListener listener : listeners) {
            if (listener != null) {
                listener.onSoftKeyboardClosed();
            }
        }
    }
}

然后具体调用:

//键盘监听
final SoftKeyboardStateHelper softKeyboardStateHelper = new SoftKeyboardStateHelper(findViewById(R.id.activityRoot));
softKeyboardStateHelper.addSoftKeyboardStateListener(new SoftKeyboardStateHelper.SoftKeyboardStateListener() {
    @Override
    public void onSoftKeyboardOpened(int keyboardHeightInPx) {
        //打开
    }
    @Override
    public void onSoftKeyboardClosed() {
        //关闭
    }
});

最后根据需要做自己的逻辑处理就好了。

本文转载自:http://blog.csdn.net/android_heng/article/details/52316942

先进青年
粉丝 0
博文 28
码字总数 9089
作品 0
武汉
私信 提问
Android Edittext输入的问题

各位 我现在在做一款应用 产品经理要求在输入字符的时候 当判断输入了4个汉字以后会自动收起软键盘 于是我做了判断 当Edittext 监听到输入的字符长度为4的时候 让软键盘收起 但现在发现有的手...

马小玲
2012/04/24
3.6K
4
Android 软键盘的显示和隐藏,这样操作就对了

一、前言 如果有需要用到输入的地方,通常会有需要自动弹出或者收起软键盘的需求。开篇明义,本文会讲讲弹出和收起软键盘的一些细节,最终还会从源码进行分析。 想要操作软键盘,需要使用到 ...

承香墨影
2017/12/04
0
0
Android 调用虚拟返回键函数onBackPressed()

Android自带有虚拟返回键,但一般在界面左上角还是会做一个返回按钮。刚开始写Android的时候返回按钮的处理逻辑就是结束当前的Activity,调用的是finish()。 后来做表单的过程中发现一个问题...

Kid_Lau
2016/09/04
1K
0
React Native 小记 - TouchableOpacity 单次点击无效

一般是焦点问题,解决方法:即在 ScrollView 标签内,根据情况设置其 属性值为 或者 。详细解决过程如下: 0x00 描述 收到测试人员提交的 Bug:帐号密码输入完毕按返回键关闭键盘后,点击登录...

cafeting
2018/10/23
0
0
iOS开发之键盘的弹出与隐藏

当界面上需要弹出键盘时,首先要注册通知监听器。 通知中心(NSNotificationCenter)提供了方法来注册一个监听通知的监听器(Observer) - (void)addObserver:(id)observer selector:(SEL)aSele...

shenhuniurou
2016/03/20
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
3
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
12
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
13
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0
Django的ChoiceField和MultipleChoiceField错误提示,选择一个有效的选项

在表单验证时提示错误:选择一个有效的选项 例如有这样一个表单: class ProductForm(Form): category = fields.MultipleChoiceField( widget=widgets.SelectMultiple(), ...

编程老陆
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部