Android软键盘的打开和关闭的监听

Android 监听EditText输入框软键盘显示及隐藏 由于,安卓系统并没有提供软键盘弹入和弹出的方法。所以,我们需要自己自定义一个监听软件盘的类。大致实现原理就是监听视图树中布局或可视状态发生改变超过一定的数值,来监听软键盘的弹入弹出事件。 阅读详情

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    tools:context="com.haoyue.notedemos.input.InputDialogActivity">
    <EditText
        android:id="@+id/etListener"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_margin="20dp"
        android:background="@drawable/edittext_bc"
        android:hint="InputText"
        android:textColorHint="#00bb33"
        android:paddingLeft="10dp"/>
</LinearLayout>

Activity

public class InputDialogActivity extends BaseActivity {
    @BindView(R.id.etListener)
    EditText mEtListener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_input_dialog);
        ButterKnife.bind(this);
        setListenerFotEditText(findViewById(R.id.activity_main_layout));
    }
    private void setListenerFotEditText(View view){
        SoftKeyboardStateHelper softKeyboardStateHelper = new SoftKeyboardStateHelper(view);
        softKeyboardStateHelper.addSoftKeyboardStateListener(new SoftKeyboardStateHelper.SoftKeyboardStateListener() {
            @Override
            public void onSoftKeyboardOpened(int keyboardHeightInPx) {
                //键盘打开
                Toast.makeText(InputDialogActivity.this, mEtListener.getText().toString() + "打开", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onSoftKeyboardClosed() {
                //键盘关闭
                Toast.makeText(InputDialogActivity.this, mEtListener.getText().toString() + "关闭", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

SoftKeyboardStateHelper

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 addSoftKeyboardStateListener(SoftKeyboardStateListener listener) {
        listeners.add(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();
            }
        }
    }
}

原文地址:url

Android软键盘监听高度变化,打开关闭,任意View跟随软键盘进行平移 Android软键盘监听高度变化,打开关闭,任意View跟随软键盘进行平移 https://github.com/rockscy/uicontroll 阅读详情

相关推荐

Android SoftKeyboard Listener Demo

Android SoftKeyboard Listener Demo

键盘显示时Editext获取焦点,键盘隐藏时失去焦点

做搜索框时遇到一个需求:键盘显示时Editext获取焦点,键盘隐藏时失去焦点,看起来比较人性化新建一个类,SoftKeyBoardListener:import android.app.Activity; import android.graphics.Rect; import android.view.View; import android.view.ViewTreeObserver; publ

扣子Coze大师班 1466

【Ablation Studies 理解】深度学习模型组件的对比实验/性能分析

Ablation Study 用于检测深度学习/机器学习模型中各部分构件对于整体的重要性。 可以理解为为:组件\tricks重要性测试、组件性能系统性分析、控制变量法、组件去除对比实验、性能敏感性测试、性能因子分析等 Ablation Studies 一些新颖的深度学习模型在论文中都会进行AblationStudy,这部分的主要意义在于系统性的移除模型中的各种组件/trick等因子或者是创新的...

TomRen 4586

Android 软键盘的打开关闭监听

软键盘的事件监听,通常软键盘的收起方式大致3种: 1.点击软键盘右下角的Return按钮(系统收起) 2.输入框焦点时按返回按钮(系统收起) 3.点击软键盘和输入框的外部(自发收起) 4.点击软键盘自带的收起按钮(软键盘收起)前三种事件可以监听,方式都比较简单1.点击软键盘右下角的Return按钮给输入框设置监听 editText.setOnEditorActionListener(new

Kenway090704的博客 1775

AUTOSAR E2E Protocol实战:Profile1到Profile5的配置差异与最佳实践

本文深入解析AUTOSAR E2E Protocol中Profile1到Profile5的核心配置差异与适用场景。针对经典CAN、CAN FD及以太网等不同总线,详细对比了计数器、CRC、DataID等关键参数,并结合实战代码与配置示例,为工程师根据功能安全等级、数据长度与带宽限制选择最佳Profile提供了清晰的选型路径与工程实践指南。

milk5的博客 938

别再到处找密钥了!手把手教你搞定Halcon 24.11/25.05的试用授权(附每月更新提醒)

本文详细介绍了Halcon 24.11/25.05试用授权的获取与配置方法,包括解密新版授权机制、快速配置指南、每月更新规律及多版本共存管理技巧。帮助开发者避免常见授权问题,提升工作效率,特别适合机器视觉领域的初学者和专业人士。

weixin_29238147的博客 1134

android 后台键盘按键监听,android键盘的监听

android 键盘监听从知乎上看到的一种解决方案,目前还没发现有什么坑。public class SoftKeyBroadManager implements ViewTreeObserver.OnGlobalLayoutListener{public interface SoftKeyboardStateListener {void onSoftKeyboardOpened(int keybo...

weixin_39525300的博客 499

CANoe实战:手把手教你用J1939.dbc发送超8字节长帧报文(附完整CAPL代码)

本文详细解析了使用CANoe和J1939.dbc实现超8字节长帧报文的分包发送技术,提供完整的CAPL代码实现与优化策略。内容涵盖J1939.dbc配置、分包发送模块设计、接收端处理逻辑,并与ISO 15765-2协议进行深度对比,帮助开发者构建高效可靠的商用车通信解决方案。

weixin_29169899的博客 392

Android 监听软键盘打开和关闭

先上图 这是一个大佬的方法,封装好了类,直接拿去调用一下就可以了很方便 这里找不到大佬的原文链接。因为我发现网上很多这个代码,参数注释一模一样,就是年代不一样。。。分不清。我这也是一样的,懒得自己封装了,代码已经被我净化了,没啥可以删除的了,注释留着帮助小白。 注意事项在文章末尾 重点1:创建一个空类,直接把这个代码块粘进去,完成第一步 import android.app.Activity; import android.graphics.Rect; import android.v.

学习使我快乐_玉祥 1785

MATLAB仿真耗散孤子共振与金兹堡-朗道方程解析

耗散孤子共振(DSR)是非线性光学中的特殊脉冲现象,通过平衡非线性效应、色散与能量耗散实现稳定传输。其核心数学模型金兹堡-朗道方程(GLE)描述了光脉冲在增益介质中的演化规律,采用分步傅里叶方法(SSFM)可高效求解这类非线性偏微分方程。该技术在光纤激光器设计、高速光通信系统优化等领域具有重要价值,特别是在需要高能量脉冲保持稳定传输的场景。MATLAB数值仿真为理解DSR物理机制提供了直观工具,通过参数扫描可验证脉冲能量与宽度的线性关系特征,并为实际器件设计提供预测依据。

weixin_31240035的博客 256

解决西门子Step 7 basic 找不到许可证问题

你在使用博图软件是否遇到过Step 7 basic 找不到许可证的问题呢!不言怕,今天我就来告诉你该如何处理吧!看步骤: 1.删除原授权的License: 打开Automation License Manager应用,然后我们可以发现仅有的License Key前面有一个时钟,说明它已经过期不可用,我们就要去寻求新的Key. 打开“我的电脑”,选择C盘,点击上方查看 点击选项–>查看 然...

让技术没有门槛 14万+

怎么监听Android软键盘的打开和关闭

这个昨天写了蛮近,太费劲了,目前还没有我觉得比较好的方式去解决。 也查阅了很多朋友的资料和博客,却一直没有完成我需要的效果。 最后无奈使用了下面这个方法: 1 public class InputStateLinearLayout extends LinearLayout{ 2 private OnSizeChangedListener listener; 3 ...

weixin_30920597的博客 91

智能车赛道识别:八邻域算法的实战解析与优化

本文深入解析了智能车赛道识别中八邻域算法的核心原理与实战优化。作为兼顾性能与稳定性的经典方案,该算法通过模拟探险家环顾八方的策略,能精准追踪弯道与直道边界。文章详细拆解了代码逻辑,并提供了边界平滑、异常处理及应对十字路口、环岛等复杂场景的关键优化策略,助力开发者提升智能车视觉系统的鲁棒性与实时性。

weixin_29228781的博客 260

android点击打开软键盘,Android中的活动中的软键盘打开和关闭监听器

这仅适用android:windowSoftInputMode于您的活动adjustResize在清单中设置的情况。您可以使用布局侦听器来查看键盘是否调整了活动的根布局。我为我的活动使用类似下面的基类:publicclassBaseActivityextendsActivity{privateViewTreeObserver.OnGlobalLayoutListenerkeyboar...

weixin_30386973的博客 208

Ardupilot无人船(车)mavros自主控制

rover 4.4。

超维空间科技的博客 3229

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

android 取消点击监听,Android中的活动中的软键盘打开和关闭监听...

这仅适用于android:您的活动的windowSoftInputMode在清单中设置为adjustResize.您可以使用布局侦听器来查看键盘是否调整了活动的根布局.我为我的活动使用类似下面的基类:public class BaseActivity extends Activity {private ViewTreeObserver.OnGlobalLayoutListener keyboard...

weixin_42275078的博客 632

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android控制软键盘弹起,android 键盘监听弹起和关闭

https://blog.youkuaiyun.com/Dota_wy/article/details/78781197电话键键名 描述 键值KEYCODE_CALL 拨号键 5KEYCODE_ENDCALL 挂机键 6KEYCODE_HOME 按键Home 3KEYCODE_MENU 菜单键 82KEYCODE_BACK 返回键 4KEYCODE_SEARCH 搜索键 84KEYCODE_CAMERA 拍照...

weixin_42392054的博客 448

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android 监听手机键盘打开和关闭状态

工具类: import android.graphics.Rect; import android.view.View; import android.view.ViewTreeObserver; import java.util.LinkedList; import java.util.List; public class SoftKeyboardStateHelper impleme

xizhilang201的专栏 862

Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态

最近在项目中,需要获取到软键盘的高度,再将底部的布局上移键盘的高度,话不多说,直接上代码: 获取软键盘高度 //一个静态变量存储高度 public static int keyboardHeight = 0; boolean isVisiableForLast = false; ViewTreeObserver.OnGlobalLayoutListener on...

龙旋的博客 5248

android 监听 soft keyboard打开与关闭

首先在manifest.xml文件中将相应的activity属性中加入android:windowSoftInputMode="adjustResize" 参数。 下一步就是在layout resize的时候加入相应的listener,可惜android没有提供相应的api,我们只能用自己的方式来监听这个事件 代码如下: public class MyLayout ex

u012909631的专栏 1530

Android 底部按钮被软键盘顶起问题解决

我们目前的项目是采用单 Activity 多 Fragment 的架构模式, AndroidManifest.xml 内 MainActivity 的配置如下所示。 <activity android:name=".MainActivity" android:exported="true" android:window...

MarkRZJ的博客 5876

Android 监听键盘状态 获取键盘高度

Android暂时还没有提供一个合适的API来获取/监听键盘的状态和高度 , 而我们又经常会有这个需求. 最近我的一个项目中,在ugc页面需要在键盘顶部,紧贴着键盘显示一个文字提示,当键盘消失时就隐藏. 因此,我需要监听软键盘的打开/关闭 , 以及获取它的高度. ViewTreeObserver A view tree observer is used to register listeners...

卓原的进化之旅 3116

android 软盘高度计算,Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态...

最近在项目中,需要获取到软键盘的高度,再将底部的布局上移键盘的高度,话不多说,直接上代码:获取软键盘高度//一个静态变量存储高度public static int keyboardHeight = 0;boolean isVisiableForLast = false;ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = ...

weixin_30497687的博客 314

Android 通过软键盘 的显隐控制Editext的光标

private EditText et; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ...

FlyPig_Vip的博客 612

软键盘问题整理

最近开发中遇到了一些软键盘相关的问题,所以整理下与大家分享: 一、软键盘的开启与关闭 开启: 1、获取InputMethodManager实例。 2、调用showSoftInput()方法。 fun showSoftInput(view: View?) { view?.let { val inputMethodManager = it.context?.getSystemService(Context.INPUT_METHOD_SERVICE.

且听真言 1820

android软键盘动画,Android 软键盘

软键盘打开public static void openKeybord(EditText mEditText, Context mContext) {InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);imm.showSoftInput(mEdit...

weixin_42315569的博客 407
上一篇: textView动态设置颜色
下一篇: 魅族推送集成
green-Fir
博客等级 码龄9年 15粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值