首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android - 如何检测屏幕中显示的软键盘

Android 应用程序中检测屏幕中显示的软键盘有多种方法,以下是一些常见的方法:

  1. 监听键盘高度

在 Android 应用程序中,可以通过监听键盘高度来检测当前显示的软键盘。可以使用 OnKeyboardHeightChangedListener 监听器来监听键盘高度的变化,并使用 KeyboardHeight 属性来获取当前键盘高度。

例如:

代码语言:java
复制
// 创建一个键盘高度监听器
OnKeyboardHeightChangedListener listener = new OnKeyboardHeightChangedListener() {
    @Override
    public void onKeyboardHeightChanged(int height) {
        // 键盘高度发生变化时,可以在这里处理事件
    }
};

// 注册监听器
keyboardHeightObserver = getKeyboardHeightObserver(listener);

// 获取当前键盘高度
int currentKeyboardHeight = getKeyboardHeight();
  1. 监听键盘输入事件

在 Android 应用程序中,可以通过监听键盘输入事件来检测当前显示的软键盘。可以使用 OnKeyboardActionListener 监听器来监听键盘输入事件,并使用 onKey 方法来检测键盘输入。

例如:

代码语言:java
复制
// 创建一个键盘输入事件监听器
OnKeyboardActionListener listener = new OnKeyboardActionListener() {
    @Override
    public void onKey(int primaryCode, int[] keyCodes) {
        // 键盘输入事件发生时,可以在这里处理事件
    }

    @Override
    public void onPress(int primaryCode) {
        // 键盘按键被按下时,可以在这里处理事件
    }

    @Override
    public void onRelease(int primaryCode) {
        // 键盘按键被释放时,可以在这里处理事件
    }

    @Override
    public void onText(CharSequence text) {
        // 键盘输入文本时,可以在这里处理事件
    }
};

// 注册监听器
keyboardActionListener = getKeyboardActionListener(listener);

// 监听键盘输入事件
keyboardActionListener.onText(text);
  1. 使用 AccessibilityService

在 Android 应用程序中,可以使用 AccessibilityService 来检测当前显示的软键盘。可以使用 AccessibilityServicedispatchGesture 方法来检测屏幕上的手势,并使用 AccessibilityNodeInfofindNode 方法来查找与手势相关的节点。

例如:

代码语言:java
复制
// 创建一个 AccessibilityService
private AccessibilityServiceCompat mService = AccessibilityServiceCompat.create(this);

// 注册服务
if (mService != null) {
    mService.setAccessibilityService(true);
    mService.addAccessibilityStateListener(this);
}

// 检测屏幕上的手势
private boolean isKeyboardOpen(Context context) {
    // 获取当前应用的信息
    AccessibilityNodeInfoCompat info = AccessibilityServiceCompat.getAccessibilityNodeInfoCompat(context, AccessibilityServiceCompat.ACCESSIBILITY_SERVICE);

    if (info != null) {
        // 获取当前节点信息
        AccessibilityNodeInfo nodeInfo = info.getNode();

        if (nodeInfo.getClassName().equals("android.widget.EditText")) {
            // 判断 EditText 是否处于聚焦状态
            if (nodeInfo.isSelected(0)) {
                return true;
            }
        } else if (nodeInfo.getClassName().equals("android.widget.TextView")) {
            // 判断 TextView 是否处于聚焦状态
            if (nodeInfo.isFocused(0)) {
                return true;
            }
        }
    }

    return false;
}

// 监听器
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
        if (event.getPackageName() != null && event.getClassName().equals("android.view.ViewRootImpl")) {
            // 判断当前应用是否处于后台状态
            if (!event.getPackageName().equals(getPackageName())) {
                mService.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED, getPackageName(), "android.view.ViewRootImpl");
            }
        }
    }
}

// 其他方法
...

以上是一些 Android 应用程序中检测屏幕中显示的软键盘的方法,可以根据具体情况进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android 图片显示屏幕适配问题

    Android 图片显示屏幕适配问题 在Android开发中比较头疼Android分辨率问题,那么这里给大家介绍个万能办法,这个办法优点是可以实现万能适应,给开发和美工设计提供了依据,但是对开发来说代码量也不少...,具体办法: (1)获取屏幕尺寸 WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE...d.getHeight(); DisplayMetrics dm = getResources().getDisplayMetrics() mScreenDensity = dm.density; (2)美工设计图尺寸...uiHeight (3)获取缩放比例 float scaleWidth = mWidth / uiWidth; float scaleHeight = mHeight/ uiHeight; (4)所有布局尺寸用代码实现...以上就是Android 图片显示屏幕适配问题万能解决办法,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站支持!

    97330

    Android屏幕手势检测实现代码

    Android 关于手势操作提供两种形式:一种是针对用户手指在屏幕上划出动作而进行移动检测,这些手势检测通过android提供监听器来实现;另一种是用 户手指在屏幕上滑动而形成一定不规则几何图形...(即为多个持续触摸事件在屏幕形成特定形状);本文给大家分享android屏幕手势检测实现代码。...Android屏幕手势检测原理是由于触摸事件检测与识别比较繁琐,因此Android提供了手势检测器帮助开发者识别手势。...利用手势检测器可以自动辨别常用几个手势事件,如点击、长按、滑动等,从而使开发者专注于业务逻辑,不必在手势行为判断上绞尽脑汁。...总结 以上所述是小编给大家介绍Android屏幕手势检测实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家。在此也非常感谢大家对ZaLou.Cn网站支持!

    1K21

    Android 软键盘那些事

    android:windowSoftInputMode activity主窗口与软键盘交互模式,可以用来避免输入法面板遮挡问题,Android1.5后一个新特性。...这个属性能影响两件事情: 【一】当有焦点产生时,软键盘是隐藏还是显示 【二】是否减少活动主窗口大小以便腾出空间放软键盘设置必须是下面列表一个值,或一个”state…”值加一个”adjust…”...【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示 【H】adjustResize:该Activity总是调整屏幕大小以便留出软键盘空间(可以显示全部屏幕) 【I...】adjustPan:当前窗口内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容部分(软键盘会遮挡屏幕android:windowSoftInputMode 活动主窗口如何与包含屏幕软键盘窗...故而,我建议我们配置,统一使用如下设置: android:windowSoftInputMode=" stateAlwaysHidden | adjustPan "

    2K10

    获取屏幕上正在显示activity 博客分类: Android小技巧

    用过ActivityManager童鞋估计都知道,可以从ActivityManager里面可以获取到当前运行所有任务,所有进程和所有服务,这是任务管理器核心。...仔细看getRunningTasks文档,里面说获取是系统"running"所有task,"running"状态包括已经被系统冻结task。...而且返回这个列表是按照顺序排列,也就是说第一个肯定比第二个后运行。 getRunningTasks有个整型参数,表示返回列表最大个数。...那么,我们如果把1作为参数给进去,那么他返回task就是当前运行那个task,然后从task获取到最顶层activity,这个activity就是当前显示给用户那个activity了。...("", "pkg:"+cn.getPackageName()); Log.d("", "cls:"+cn.getClassName());           至于这个能做什么,嘿嘿,我相信你知道

    2.9K30

    Android笔记:软键盘弹出遮盖原来界面的布局控件

    ); 2.直接在项目的MainFest.xml该Activity设置: <activity android:name="com.drain.main.LoginControlActivity...如果加上android:windowSoftInputMode="adjustPan"这样键盘就会覆盖屏幕。...:当这个activity出现时,软键盘将一直保持在上一个activity里状态,无论是隐藏还是显示   【C】stateHidden:用户选择activity时,软键盘总是被隐藏   【D】stateAlwaysHidden...:当该Activity主窗口获取焦点时,软键盘也总是被隐藏   【E】stateVisible:软键盘通常是可见   【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示状态...  【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示   【H】adjustResize:该Activity总是调整屏幕大小以便留出软键盘空间   【I】adjustPan

    1.1K20

    详解Android获取软键盘状态和软键盘高度

    详解Android获取软键盘状态和软键盘高度 应用场景 在Android应用中有时会需要获取软键盘状态(即软键盘显示还是隐藏)和软键盘高度。这里列举了一些可能应用场景。...API困境 Android SDK没有提供任何API来直接获取软键盘状态和软键盘高度,网上很多资料说InputMethodManagerisActive()方法可以获取软键盘状态,不过实际测试发现...注册布局变化监听 在Android软键盘由隐藏变为显示,或由显示变为隐藏时,会触发当前布局View全局布局变化。通过监听全局布局变化就可以得知软键盘状态。...不过好在除了软键盘外,其他操作对窗口可见区域影响占整个屏幕大小比例都不是很大,通过设置一个合理阈值,就可以较准确判断出是否是软键盘显示和隐藏引起布局变化。...Window可见区域高度差值大于整个屏幕高度1/3,则表示软键盘显示,否则软键盘为隐藏状态。

    2.9K20

    Android开发笔记(一百四十八)自定义输入法软键盘

    然而系统软键盘即使切换到123数字模式,依旧显示包括标点符号在内冗余按键。 2、系统软键盘固定在屏幕下方弹出,无法做为控件嵌入到页面布局,更无法指定软键盘显示位置。...3、系统软键盘会自动响应EditText焦点变更事件,常常在意料之外突然之间蹦出来,弄得开发者要么剥夺EditText焦点,要么强行关闭软键盘显示,但无论哪种方式都得开发者强行**,很不方便。...那么这个软键盘又是如何实现呢?其实它跟平常自定义控件基本类似,只在细节上有所差异,下面分步说明自定义软键盘过程。...2、自定义控件主要工作是书写自定义控件类,自定义软键盘也不例外,有了自定义控件类,才能处理十个数字键按键动作,才能把软键盘做为普通控件嵌入到其它布局文件。...3、软键盘不是一个孤立控件,它按键动作需要实时在某个编辑框把数字显示出来,所以在使用时还得给它绑定一个EditText,这样软键盘才知道我按键要输出给这个EditText,而不是输出给那个EditText

    2.5K30

    5种方法完美解决android软键盘挡住输入框方法详解

    在开发,经常会遇到键盘挡住输入框情况,比如登录界面或注册界面,弹出软键盘把登录或注册按钮挡住了,用户必须把软键盘收起,才能点击相应按钮,这样用户体验非常不好。...例如:Activityxml布局只有一个LinearLayout包含若干EditText,在ActivityAndroidMainfest.xml设置android:windowSoftInputMode...通过该工具,我们看到: 界面真正能用高度=屏幕高度-状态栏高度-软键盘高度 界面蓝框是真正界面所用高度: ?...实现原理: 此方法通过监听Activity最外层布局控件来检测软键盘是否弹出,然后去手动调用控件scrollTo方法达到调整布局目的。...= usableHeightPrevious) { //3、获取Activityxml布局在当前界面显示高度 int usableHeightSansKeyboard = mChildOfContent.getRootView

    23.3K31

    Android开发常用知识点

    Activity而导致另一个被覆盖Activity显示出来时,软键盘会使用默认设置。...stateVisible 当用户导航到Activity主窗口时,软键盘是可见。不过当用户离开一个Activity而导致另一个被覆盖Activity显示出来时,软键盘会使用默认设置。...stateAlwaysVisible 当该Activity主窗口获取焦点时,软键盘总是显示,不管是确认导航到该Activity还是Activity被覆盖后显示出来。...adjustUnspecified 这个是软件盘行为默认设置。它不被指定是否该Activity主窗口调整大小以便留出软键盘空间,或是否窗口上内容得到屏幕上当前焦点是可见。...adjustResize 该Activity主窗口总是被调整屏幕大小以便留出软键盘空间 adjustPan 该Activity主窗口并不调整屏幕大小以便留出软键盘空间。

    2.6K10

    Android如何指定SnackBar在屏幕位置及小问题解决

    Android指定SnackBar在屏幕位置 Snackbar 常以一个小弹出框形式,出现在手机屏幕下方或者桌面左下方,并且是在屏幕所有层最上方。...如果要指定它在屏幕出现位置,可以把SnackBar放置在android.support.design.widget.CoordinatorLayout内。...Snackbar位置显示一点小问题 compile 'com.android.support:design:23.4.0' Android Studio 新建项目会默认有个展示Snackbar方法,...其中有处写到自定义显示位置,感觉很有必要,因为这个和Toast不一样,Toast会显示软键盘上,而这个会被软键盘挡住。...当然自己写显示在上边很麻烦,还要处理显示及隐藏动画 在Snackbar.Java animateViewIn() 和 animateViewout() 里都有规定 Github上有个很不错

    4.4K20

    Android获得控件在屏幕绝对坐标

    (location);//获取在整个屏幕绝对坐标 location [0]--->x坐标,location [1]--->y坐标 getLocationOnScreen 计算该视图在全局坐标系x...,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏高度)//获取在当前屏幕绝对坐标 getLocationInWindow 计算该视图在它所在widnow坐标x,y值,获取在整个窗口内绝对坐标...在onWindowFocusChanged(boolean hasFocus)获取为好 即覆写ActivityonWindowFocusChanged(boolean hasFocus)方法 XXX_Activity...int[] location2 = new int[2] ; view.getLocationOnScreen(location2);//获取在整个屏幕绝对坐标...//do something } 更多资料: Android View各种尺寸位置相关方法探究 PS:本文为转载,首发地址不可考,网上搜到全是转载,故不能贴出原地址,如果你是作者可以留言原地址或者要求删除

    2.1K20

    如何使用机器学习来检测手机上聊天屏幕截图

    如果发送或接收了大量这些屏幕截图,那么最终手机大部分内存都将被阻塞。在保留重要图像安全同时查找和删除这些屏幕快照是一项非常耗时任务。...因此想用机器学习来完成这项工作 理念 从普通图像检测聊天屏幕截图任务可以表述为经典二进制图像分类问题!可以使用卷积神经网络(CNN)来完成这项工作。...CNN输入层将是一幅图像,输出层将仅包含一个神经元,告诉输入图像是正常图像还是聊天屏幕截图。在接下来部分,将介绍构建模型所有细节。 数据采集 在机器学习,一切都始于数据。...第一个表示聊天屏幕截图,另一个表示普通图像。因此从不同消息传递应用程序(如WhatsApp,Messenger,Instagram等)收集了与朋友聊天屏幕截图。...在卷积基础,使用了两个卷积块,每个包含32个过滤器。内核大小为3 * 3。第一卷积层输入尺寸为64 * 64 * 3(大小为64 px * 64 px RGB图像)。

    2.1K10

    Android 浮动编辑框具体实现代码

    Android app 开发中经常会遇到一些输入框要悬浮到软键盘上方需求,大致做法有做法如下。...Android输入法软键盘悬浮,最常见一种方法是通过给ViewTreeObserver添加ViewTreeObserver.OnGlobalLayoutListener当全局布局完成时或视图树中视图可见性发生变化时回调...onGlobalLayout方法,在onGlobalLayout方法获取当前窗口区域,获取区域高度如果超过屏幕五分之一一般认为是软键盘处于显示状态,区域高度即为输入法软键盘高度,通过此高度动态调整...@Override public void onGlobalLayout() { Rect rect = new Rect(); // 测量当前窗口显示区域...</item </style 2.在AndroidManifest.xml设置 <activity android:name=".FloatEditorActivity" android

    1.2K10

    Android爬坑之旅:软键盘挡住输入框问题终极解决方案

    ↑↑↑ OK,这只是入门,基本上地球上所有的Android工程师都能搞定。 别急,看下面~ 加上WebView试试看?坑来了…… 上面的入门篇软键盘是由原生EditText触发弹出。...如果Activity是全屏模式,那么android.R.id.content就是占满全部屏幕区域。...3.界面变化之后,获取"可用高度" 当软键盘弹出了之后,接下来事情是获取改变之后界面的可用高度(可以被开发者用以显示内容高度)。...因为能触发OnGlobalLayout事件原因有很多,不止是软键盘弹出变化,还包括各种子View隐藏显示变化等,它们对界面高度影响有限。...加上了这个判断之后,只有界面的高度变化超过1/4屏幕高度,才会进行重新设置高度,基本能保证代码只响应软键盘弹出。

    4.7K20
    领券