透明状态栏导致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"& ...
最新文章
- VBS学习日记(二) 基础知识
- oracle显性游标,Oracle高级显式游标的使用
- 系统间通信1:阻塞与非阻塞式通信A
- 如何强制 .NET 程序以 管理员模式 运行 ?
- vue mint-ui 三级地址联动
- 20. 包含min函数的栈
- The constness of a method should makes sense from outside the object
- jquery手机模拟器
- PMP 考点 第六章 项目进度管理
- JAVA 类和对象的实例
- 光伏窗性能研究(3)——单层光伏窗节能性能研究
- 静电放电(ESD)知识小记
- html之使用session进行服务器之间的跳转以及记录
- 舒淇放下黎明战胜抑郁 自称没责任感且不会结婚q1h
- 在IDEA中集成Jenkins插件 解决Missing or bad crumb data异常
- Edge AI边缘智能:Communication-Efficient Edge AI: Algorithms and Systems(未完待续)
- 反向代理和正向代理的区别
- ASP.NET 在vs中使用Calendar控件 制作一个日历 并标注节假日
- 腾讯打击QQ宠物外挂颁布Q宠打工新规定(转)
- 数据可视化分析教学课件——FineBI实验册节选====物流经营分析