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

如何从系统覆盖视图中检测Android中的软键盘可见/不可见?

在Android中,可以通过监听系统的软键盘状态来检测软键盘的可见性。以下是一种常用的方法:

  1. 首先,在你的Activity中,你需要获取到根布局的View对象,可以通过调用findViewById(android.R.id.content)来实现。
  2. 接下来,你可以为根布局的View对象设置一个全局布局变化监听器,通过View.getViewTreeObserver().addOnGlobalLayoutListener()方法来实现。这个监听器会在布局发生变化时被调用。
  3. 在监听器的回调方法中,你可以获取到根布局的可见区域和整个布局的高度。通过比较这两个值,你可以判断软键盘的可见性。
    • 如果可见区域的高度小于整个布局的高度,那么软键盘是可见的。
    • 如果可见区域的高度等于整个布局的高度,那么软键盘是不可见的。

以下是一个示例代码:

代码语言:txt
复制
View rootView = findViewById(android.R.id.content);
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        Rect r = new Rect();
        rootView.getWindowVisibleDisplayFrame(r);
        int screenHeight = rootView.getRootView().getHeight();
        int keyboardHeight = screenHeight - r.bottom;

        if (keyboardHeight > screenHeight * 0.15) {
            // 软键盘可见
        } else {
            // 软键盘不可见
        }
    }
});

这种方法可以在布局发生变化时实时检测软键盘的可见性。你可以根据需要在相应的逻辑中处理软键盘的可见/不可见状态。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动应用分析(MTA):https://cloud.tencent.com/product/mta
  • 腾讯云移动推送(TPNS):https://cloud.tencent.com/product/tpns
  • 腾讯云移动直播(MLVB):https://cloud.tencent.com/product/mlvb
  • 腾讯云移动短信(SMS):https://cloud.tencent.com/product/sms
  • 腾讯云移动智能(MSA):https://cloud.tencent.com/product/msa
  • 腾讯云移动游戏加速(GME):https://cloud.tencent.com/product/gme
  • 腾讯云移动应用安全(MAS):https://cloud.tencent.com/product/mas
  • 腾讯云移动推广(ASO):https://cloud.tencent.com/product/aso
  • 腾讯云移动测试(MTS):https://cloud.tencent.com/product/mts
  • 腾讯云移动支付(MPS):https://cloud.tencent.com/product/mps
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 软键盘那些事

"和"adjustUnspecified"以外)将覆盖在主题中设置值 各值含义: 【A】stateUnspecified:软键盘状态并没有指定,系统将选择一个合适状态或依赖于主题设置 【B】stateUnchanged...】adjustPan:当前窗口内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容部分(软键盘会遮挡屏幕) android:windowSoftInputMode 活动主窗口如何与包含屏幕上软键盘窗...2> 活动主窗口调整——是否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口部分被软键盘覆盖时它内容的当前焦点是可见。...软键盘状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适状态或依赖于主题设置。...故而,我建议我们配置,统一使用如下设置: android:windowSoftInputMode=" stateAlwaysHidden | adjustPan "

1.9K10

移动端那些戳你痛点软键盘问题及解决方法

IOS 软键盘收起表现 触发软键盘“收起”按钮键盘或者输入框以外页面区域时,输入框失去焦点,软键盘收起。 Android 软键盘收起表现 触发输入框以外区域时,输入框失去焦点,软键盘收起。...这里参考这篇文章:ios键盘难题与可见口(visualViewport)api[2] 当时ios设计者考虑到一个问题:当键盘弹起时,页面无法感知到键盘存在。...: 1、吸顶元素能够继续吸顶 这个问题因为键盘弹出ios和安卓处理方式不同,这个现象就只发生在ios系统。...4、ios软键盘收起时页面不能自然滑落 对于部分ios系统部分微信webview内,发现软键盘收起时,滚动上去页面没有滚动下来,造成了下面区域留出了一片灰色区域。...参考文章: WebView上软键盘兼容方案[5] js如何获取iOS键盘高度[6] 移动端input“输入框”常见问题及解决方法[7] ios键盘难题与可见口(visualViewport)api[

7.6K30

实现边到边体验 | 让您软键盘动起来 (一)

Android 11 新功能之一是可以让应用在对于屏幕上软键盘打开和关闭过程创建无缝过渡动画效果,这一功能源自 Android 11 对 WindowInsets API 大量改进。...上面的每一步都环环相扣,所以我们会在不同文章中分别介绍。在这个系列第一部,我们会介绍如何实现边到边,以及 Android 11 相关 API 改动。...简单回顾一下,实现 "边到边" 会让您应用渲染在系统状态栏后面,如上图所示。 引用去年我自己的话: 实现从边到边全面屏体验后,系统栏会覆盖在应用内容前方。...在姗姗来迟了十年后,我们终于可以回答这个关于如何查看软键盘可见 StackOverflow 问题。 在 Android 如何查看软键盘可见性?...如何关闭/隐藏 Android 软键盘? 这一次我们要介绍 Android 11 一个新 API,它叫 WindowInsetsController。

25820

实现边到边体验 | 让您软键盘动起来 (一)

Android 11 新功能之一是可以让应用在对于屏幕上软键盘打开和关闭过程创建无缝过渡动画效果,这一功能源自 Android 11 对 WindowInsets API 大量改进。...两个 Android 11 软键盘动画效果示例: Google Search 应用 (左),Messages (右) 让我们来看看如何在您应用添加这种用户体验。...上面的每一步都环环相扣,所以我们会在不同文章中分别介绍。在这个系列第一部,我们会介绍如何实现边到边,以及 Android 11 相关 API 改动。...简单回顾一下,实现 "边到边" 会让您应用渲染在系统状态栏后面,如上图所示。 引用去年我自己的话: 实现从边到边全面屏体验后,系统栏会覆盖在应用内容前方。...除此之外还有软键盘,有时候也叫 IME (输入法编辑器),这是另外一个我们需要了解系统 UI 。 应用如何实现边到边?

1.4K20

Ionic3学习笔记(九)关于 Android软键盘弹出后界面被压缩问题

软键盘弹出后,Android tabs 移到了软键盘上面,再仔细一看,整个界面都被压扁了,输入框也不知道去哪儿了。...stateUnspecified 未指定软键盘状态,系统将自动选择一个合适状态或依赖于主题中设置。 stateUnchanged 当前界面的软键盘状态取决于上一个界面的软键盘状态。...stateVisible 软键盘通常可见。 stateAlwaysVisible 用户选择 Activity 时,软键盘总是可见。...adjustUnspecified 未指定软键盘与界面内容之间显示关系。 adjustResize 该 Activity 总是调整屏幕大小以便留出软键盘空间。...adjustPan 当前窗口内容将自动移动以便当前焦点从不被键盘覆盖和用户总能看到输入内容。

91220

Android开发常用知识点

在非EditText控件找一个,设置成 android:focusable="true" android:focusableInTouchMode="true" 软键盘遮挡 解决Android软键盘在全屏下设置... 软键盘默认弹出 方法一:在OnCreate()函数,加上下面的代码 getWindow().setSoftInputMode...软键盘状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适状态或依赖于主题设置。...stateVisible 当用户导航到Activity主窗口时,软键盘可见。不过当用户离开一个Activity而导致另一个被覆盖Activity显示出来时,软键盘会使用默认设置。...系统将自动选择这些模式中一种主要依赖于是否窗口内容有任何布局视图能够滚动他们内容。如果有这样一个视图,这个窗口将调整大小,这样假设可以使滚动窗口内容在一个较小区域中可见

2.5K10

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

); 2.直接在项目的MainFest.xml该Activity设置: <activity android:name="com.drain.main.LoginControlActivity...如果加上android:windowSoftInputMode="adjustPan"这样键盘就会覆盖屏幕。...windowSoftInputMode各值含义: 【A】stateUnspecified:软键盘状态并没有指定,系统将选择一个合适状态或依赖于主题设置   【B】stateUnchanged...:当该Activity主窗口获取焦点时,软键盘也总是被隐藏   【E】stateVisible:软键盘通常是可见   【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示状态...  【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示   【H】adjustResize:该Activity总是调整屏幕大小以便留出软键盘空间   【I】adjustPan

98520

解决Android软键盘弹出覆盖h5页面输入框问题

之前我们在使用vue进行 h5 表单录入过程,遇到了Android软键盘弹出,覆盖 h5页面 输入框 问题,在此进行回顾并分享给大家: 系统Android 条件:当输入框在可视区底部或者偏下位置...触发条件:输入框获取焦点,弹出软键盘 表现:软键盘 覆盖 h5页面输入框 问题分析: 1.发现问题:当前页面box为flex布局,内容为上下固定高,中间自适应(中间区域内容过多会出现滚动条,input...flex布局,将wrapper、footer通过position:absolute方式定位在页面,发现input依旧上移,判定与flex布局无关,代码修改如下: <style .box{ /...+'px'; 方案2 我们可以借助元素 scrollIntoViewIfNeeded() 方法,这个方法执行后如果当前元素在可视区可见,则会滚动浏览器窗口或容器元素,最终让它可见,如果当前元素在可视区...100); } }); 总结 以上所述是小编给大家介绍解决Android软键盘弹出覆盖h5页面输入框问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

5.1K30

实现Android键盘中英文适配

可见密码 android:inputType=”textWebEditText” 作为网页表单文本 android:inputType=”textFilter” 文本筛选过滤 android:inputType...3、设置软键盘交互样式 有时键盘弹出需要把界面挤压到上端或直接覆盖界面。...【A】stateUnspecified:软键盘状态并没有指定,系统将选择一个合适状态或依赖于主题设置 【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个...,软键盘也总是被隐藏 【E】stateVisible:软键盘通常是可见 【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示状态 【G】adjustUnspecified...:默认设置,通常由系统自行决定是隐藏还是显示 【H】adjustResize:该Activity总是调整屏幕大小以便留出软键盘空间 【I】adjustPan:当前窗口内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容部分

2.1K10

Android开发笔记(三十六)展示类控件

3、在代码设置某控件为可见或不可见或消失,此时需要使用View类三个变量,分别是View.VISIBLE、View.INVISIBLE和View.GONE。...EditText还有一个需要特殊处理地方,就是自动关闭软键盘。一般我们希望点击其它控件时,原输入框软键盘就要自动消失,可惜Android不是这样处理。...于是我们得通过输入法工具类InputMethodManager来协助,该类对象系统服务Context.INPUT_METHOD_SERVICE获取。...,center表示保持图片原尺寸使之位于视图中间,centerCrop表示拉伸图片并使视图位于图片中间,centerInside表示使图片位于视图中间(只压拉)。...注意背景图按比例拉伸,其实背景默认以fitXY方式拉伸。 在代码设置: setScaleType : 设置图形拉伸类型。 setImageAlpha : 设置图形透明度。

1.4K30

android基础

这个属性能影响两件事情: 【一】当有焦点产生时,软键盘是隐藏还是显示 【二】是否减少活动主窗口大小以便腾出空间放软键盘设置必须是下面列表一个值,或一个”state…”值加一个”adjust…”...”和”adjustUnspecified”以外)将覆盖在主题中设置值 各值含义: 【A】stateUnspecified:软键盘状态并没有指定,系统将选择一个合适状态或依赖于主题设置 【B】stateUnchanged...:当该Activity主窗口获取焦点时,软键盘也总是被隐藏 【E】stateVisible:软键盘通常是可见 【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示状态...【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示 【H】adjustResize:该Activity总是调整屏幕大小以便留出软键盘空间 【I】adjustPan...:当前窗口内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容部分 下面是RelativeLayout各个属性 android:layout_above=”@id/xxx” –将控件置于给定

75420

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

详解Android获取软键盘状态和软键盘高度 应用场景 在Android应用中有时会需要获取软键盘状态(即软键盘是显示还是隐藏)和软键盘高度。这里列举了一些可能应用场景。...场景二 当软键盘弹出后,会将界面底部到中间一大部分全部挡住,如果用户要查看、操作被覆盖区域,必须先收起软键盘,这会影响用户交互。...API困境 Android SDK没有提供任何API来直接获取软键盘状态和软键盘高度,网上很多资料说InputMethodManagerisActive()方法可以获取软键盘状态,不过实际测试发现...注册布局变化监听 在Android软键盘由隐藏变为显示,或由显示变为隐藏时,会触发当前布局View全局布局变化。通过监听全局布局变化就可以得知软键盘状态。...当软键盘显示时,窗口可见区域大小会被压缩,当软键盘隐藏时,窗口可见区域大小会还原。

2.7K20

关闭软键盘

Android:windowSoftInputMode=”stateUnspecified”,默认设置:软键盘状态(隐藏或可见)没有被指定。...系统将选择一个合适状态或依赖于主题设置。 “stateUnchanged”, 软键盘被保持上次状态。 “stateHidden”, 当用户选择该Activity时,软键盘被隐藏。...“stateAlwaysHidden”, 软键盘总是被隐藏。 “stateVisible”,. 软键盘可见。...它不被指定是否该Activity主窗口调整大小以便留出软键盘空间, 或是否窗口上内容得到屏幕上当前焦点是可见。...系统将自动选择这些模式中一种主要依赖于是否窗口内容有任何布局视图能够滚动他们内容。 如果有这样一个视图,这个窗口将调整大小,这样假设可以使滚动窗口内容在一个较小区域中可见

1.4K40

H5页面前端开发常见兼容性问题解决方法

IOS系统下输入框光标高度不正常 问题描述:input输入框光标,在安卓手机上显示没有问题,但是在苹果手机上当点击输入时候,光标的高度和父盒子高度一样,看起来很怪异。...touch:使用具有回弹效果滚动,当手指触摸屏上移开,内容会继续保持一段时间滚动效果,继续滚动速度和持续时间和滚动手势强烈程度成正比,同时也会创建一个新堆栈上下文。 3....,导致如果延时处理的话,滚动就失效了。...Element.scrollIntoViewIfNeeded()方法也是用来将不在浏览器窗口可见区域内元素滚动到浏览器窗口可见区域,但如果该元素已经在浏览器窗口可见区域内,则不会发生滚动。...如下图中第二个分享就是有问题,而第一个分享是正常。 解决办法: 1.

2.6K10

Android页面旋转销毁Webview(不重建Activity)

Activity不重建 在Android,如果希望WebView页面在设备旋转时销毁并重新加载,可以通过以下步骤实现: 在AndroidManifest.xml文件,对应Activity添加如下配置...screenSize:屏幕尺寸变化,例如平板模式和手机模式之间切换。 keyboardHidden:键盘可见性变化,例如软键盘显示或隐藏。...locale:语言设置变化,例如用户切换了系统语言。 uiMode:UI 模式变化,例如夜间模式切换。...事件处理 只有上面的配置就可以了,如果想在设备旋转时候处理一些东西可以覆盖onConfigurationChanged()方法,以处理配置更改事件。...在该方法,你可以选择执行任何操作,或者手动调整布局等。

9810

Android 沉浸式解析和轮子使用

也就是说, Android5.0 开始,系统才真正支持沉浸式。...在上图中: 非沉浸模式 —— 展示了应用进入沉浸模式之前状态。也展示了设置 IMMERSIVE 标签后用户滑动展示系统状态。...提示气泡——第一次进入沉浸模式时,系统将会显示一个提示气泡,提示用户如何再让系统栏显示出来。...滑动操作并不会清空任何标签,也不会触发系统 UI 可见监听器,因为暂时显示导航栏并不被认为是一种可见状态。...2.5 在 PopupWindow 实现沉浸式 重点是调用以下方法,但是此方法会导致有导航栏手机底部布局会被导航栏覆盖,还有底部输入框无法根据软键盘弹出而弹出。

3.2K10

androidmanifest.xml作用_android读取xml数据

这个我用过,主要用来看手机方向改变. android手机在旋转后,layout会重新布局, 如何做到呢? 正常情况下....t3181.html 8、android:noHistory 当用户Activity上离开并且它在屏幕上不再可见时,Activity是否Activity stack清除并结束。默认是false。...这个属性能影响两件事情: 【A】当有焦点产生时,软键盘是隐藏还是显示 【B】是否减少活动主窗口大小以便腾出空间放软键盘 各值含义: 【A】stateUnspecified:软键盘状态并没有指定,系统将选择一个合适状态或依赖于主题设置...【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏 【E】stateVisible:软键盘通常是可见 【F】stateAlwaysVisible:用户选择...activity时,软键盘总是显示状态 【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示 【H】adjustResize:该Activity总是调整屏幕大小以便留出软键盘空间

1.2K20

EditText 集锦 - 开发中常用用法及遇到各种坑

(居左显示),viewEnd(居右显示),textStart(居左显示),textEnd(居右显示).这里需要注意是最低支持API版本是17,前两个可以在API14使用,而后面使用就会报红线… android...Android:EditText设置密码可见与不可见 //密码不可见模式变为密码可见模式(行得通) et_password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD...); //密码可见模式变为密码不可见模式(行不通) et_password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); 解决方法 :动态修改...TransformationMethod //密码不可见模式变为密码可见模式 et_password.setTransformationMethod(HideReturnsTransformationMethod.getInstance...()); //密码可见模式变为密码不可见模式 et_password.setTransformationMethod(PasswordTransformationMethod.getInstance

2.2K20
领券