透明状态栏导致windowSoftInputMode:adjustResize失效问题
当我们通过下面代码:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
设置状态栏透明,当界面存在EditText时,在activity里面设置windowSoftInputMode:adjustResize 无效,软键盘依然会遮挡住EditText的焦点位置。
通过下面方式可以解决,大致解决思路是,通过监听视图树的变化,然后把界面滑动到软键盘的上面。
public class WindowSoftModeAdjustResizeExecutor {// For more information, see https://code.google.com/p/android/issues/detail?id=5497// To use this class, simply invoke assistActivity() on an Activity that already has its content view set.// CREDIT TO Joseph Johnson (http://stackoverflow.com/users/341631/joseph-johnson) for publishing the original Android solution on stackoverflow.compublic static void assistActivity(Activity activity) {new WindowSoftModeAdjustResizeExecutor(activity);}private View mChildOfContent;private int usableHeightPrevious;private FrameLayout.LayoutParams frameLayoutParams;private WindowSoftModeAdjustResizeExecutor(Activity activity) {FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);mChildOfContent = content.getChildAt(0);mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {public void onGlobalLayout() {possiblyResizeChildOfContent();}});frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();}private void possiblyResizeChildOfContent() {int usableHeightNow = computeUsableHeight();if (usableHeightNow != usableHeightPrevious) {int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();int heightDifference = usableHeightSansKeyboard - usableHeightNow;frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;mChildOfContent.requestLayout();usableHeightPrevious = usableHeightNow;}}private int computeUsableHeight() {Rect r = new Rect();mChildOfContent.getWindowVisibleDisplayFrame(r);if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {return (r.bottom - r.top);}return r.bottom;}
}
然后在setContentView()方法之后调用WindowSoftModeAdjustResizeExecutor.(this) 就ok了。
透明状态栏导致windowSoftInputMode:adjustResize失效问题相关推荐
- 关于Android透明状态栏的使用以及与软键盘冲突(导致SrollView不能滑动)的解决办法
1.透明状态栏实在android4.4以上才有的新功能 (1)通过在style文件中设置 <item name="android:windowTranslucentStatus&quo ...
- android 透明状态栏方法及其适配键盘上推(一)
android的状态栏(statusBar)版本的差异化比较大.在android 4.4 以上和5.x可以设置状态栏背景颜色,但是不可以设置状态栏中字和图标的颜色.而系统默认的statusbar的字体 ...
- Android UI体验之全屏沉浸式透明状态栏效果
前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...
- 混合开发Android FlutterActivity 的透明状态栏
前言 我们知道,在纯flutter 的项目中,设置透明状态栏只需要在flutter 的入口处添加下面这段代码就可以, if (Platform.isAndroid) {//设置Android头部的导航 ...
- Android沉浸式状态栏(透明状态栏)最佳实现
Android沉浸式状态栏(透明状态栏)最佳实现 在Android4.4之前,我们的应用没法改变手机的状态栏颜色,当我们打开应用时,会出现上图中左侧的画面,在屏幕的顶部有一条黑色的状态栏,和应用的风格 ...
- Android透明状态栏解决方案
正所谓具体情况具体分析 方案一:纯色的透明状态栏 解决办法: 1.将需要透明的activity页面设置为全屏,状态栏变为透明: 在mainActivity中添加如下代码: //在setContentV ...
- Android App开发 教你分清“沉浸式”和“透明状态栏”
首先科普下,什么是"沉浸式"和"透明状态栏"? 1. 大家平时看到一些App运行后,状态栏会变成半透明,或者颜色跟随App的标题栏变色,这种特性叫"T ...
- Android 沉浸式状态栏(QQ5.0透明状态栏的效果)
大家注意一个问题: 魅族4.4系统,如果增加沉浸式状态栏,页面底部如果有按钮可能会被魅族的smbar遮挡,导致按钮不能被点击到的现象 看上面的这张图就是,魅族smatbar被隐藏后,挡住底部按钮,并且 ...
- Android全屏与透明状态栏
前言 Android沉浸式与全屏是不一样的两种主题,接下来我们看看吧 Android实现全屏 通过主题属性来实现 <style name="FullScreenTheme"& ...
最新文章
- Java单例模式个人总结(实例变量和类变量)
- 4.9.3 方法注释
- 在linux中教你通过NFS实现文件共享
- 用递归方式实现二叉树先序、中序、后序遍历
- dp打开思路4:POJ1189 UVA12511 HDU2845 HBCPC K
- 编程体系结构(09):分布式系统架构
- Python中dataframe数据框中选择某一列非空的行
- 获取客户端网卡MAC地址和IP地址的几种方法(一)
- 浅谈Borg/YARN/Mesos/Torca/Corona一类系统
- 【心电信号】基于matlab小波变换心电信号去噪【含Matlab源码 956期】
- 完全免费软件开发论坛介绍
- 【散文】 漫步在春天
- 手把手实现MATLAB的CNN回归
- PID控制算法与参数整定,用这几招轻松搞定!
- Unity 模拟键盘按键
- Spark机器学习管道--中文翻译
- 车文化:1.BMW车型概览
- 看一遍就理解:group by 详解
- ChatGPT通过谷歌L3入职测试,拿到18万美元offer?程序员们该何去何从?
- php导航条css代码生成器,怎么使用css代码制作网站导航栏?(示例)