当我们通过下面代码:

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失效问题相关推荐

  1. 关于Android透明状态栏的使用以及与软键盘冲突(导致SrollView不能滑动)的解决办法

    1.透明状态栏实在android4.4以上才有的新功能 (1)通过在style文件中设置 <item name="android:windowTranslucentStatus&quo ...

  2. android 透明状态栏方法及其适配键盘上推(一)

    android的状态栏(statusBar)版本的差异化比较大.在android 4.4 以上和5.x可以设置状态栏背景颜色,但是不可以设置状态栏中字和图标的颜色.而系统默认的statusbar的字体 ...

  3. Android UI体验之全屏沉浸式透明状态栏效果

    前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...

  4. 混合开发Android FlutterActivity 的透明状态栏

    前言 我们知道,在纯flutter 的项目中,设置透明状态栏只需要在flutter 的入口处添加下面这段代码就可以, if (Platform.isAndroid) {//设置Android头部的导航 ...

  5. Android沉浸式状态栏(透明状态栏)最佳实现

    Android沉浸式状态栏(透明状态栏)最佳实现 在Android4.4之前,我们的应用没法改变手机的状态栏颜色,当我们打开应用时,会出现上图中左侧的画面,在屏幕的顶部有一条黑色的状态栏,和应用的风格 ...

  6. Android透明状态栏解决方案

    正所谓具体情况具体分析 方案一:纯色的透明状态栏 解决办法: 1.将需要透明的activity页面设置为全屏,状态栏变为透明: 在mainActivity中添加如下代码: //在setContentV ...

  7. Android App开发 教你分清“沉浸式”和“透明状态栏”

    首先科普下,什么是"沉浸式"和"透明状态栏"? 1. 大家平时看到一些App运行后,状态栏会变成半透明,或者颜色跟随App的标题栏变色,这种特性叫"T ...

  8. Android 沉浸式状态栏(QQ5.0透明状态栏的效果)

    大家注意一个问题: 魅族4.4系统,如果增加沉浸式状态栏,页面底部如果有按钮可能会被魅族的smbar遮挡,导致按钮不能被点击到的现象 看上面的这张图就是,魅族smatbar被隐藏后,挡住底部按钮,并且 ...

  9. Android全屏与透明状态栏

    前言 Android沉浸式与全屏是不一样的两种主题,接下来我们看看吧 Android实现全屏 通过主题属性来实现 <style name="FullScreenTheme"& ...

最新文章

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

热门文章

  1. timerfd与epoll
  2. 最强整理!字节跳动历年Android中高级面试题全收录!附超全教程文档
  3. 大话数据结构—栈与队列
  4. django:bootstrap table加载django返回的数据
  5. 什么是 DDoS 攻击?
  6. 第1次作业:阅读优秀博文谈感想
  7. 移动WEB开发之JS内置touch事件[转]
  8. Java BigDecimal Rounding Mode
  9. python 核心编程第5章(习题)
  10. Docker搭建自己的GitLab