安卓使用透明状态栏和fitsSystemWindows之后icon变形的问题

Android fitsSystemWindows 因为DecorView在ViewRootImp#setView(xxx)中1.先通过WMS获取到边框insets的顶部padding和底部padding, 阅读详情

事情是这样开始的,

1.我写了一个toolbar的公共layout,如下

<ImageButton
    android:id="@+id/returnLast"
    android:layout_width="@dimen/x20"
    android:layout_height="@dimen/x20"
    android:layout_alignParentStart="true"
    android:layout_centerHorizontal="false"
    android:layout_margin="@dimen/x5"
    android:background="@drawable/left"
    android:scaleType="fitXY" />

<ImageButton
    android:id="@+id/close"
    android:layout_width="@dimen/x20"
    android:layout_height="@dimen/x20"
    android:layout_alignParentEnd="true"
    android:layout_centerHorizontal="false"
    android:layout_margin="@dimen/x5"
    android:background="@drawable/close"
    android:scaleType="fitXY" />
效果如下:



然后使用<include>标签,就可以在很多不同的布局上共用这个界面了

2.为了美观,设置了透明状态栏

(1)在BaseActivity的initToolBar(String title)方法中调用

//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

(2)在公用toolbar的最外层布局中,加上

android:clipToPadding="true"
android:fitsSystemWindows="true"

 (3)就这么简单,接下来是见证奇迹的时刻!


诶???怎么扁了???

开始解决问题,

android:fitsSystemWindows="true"

根据以往的经验,这个属性用于让状态栏空出来不被页面内容占用,如果不加这个属性,内容就会挤占状态栏,去看看官网的解释吧

根据官方文档,如果某个View 的fitsSystemWindows 设为true,那么该View的padding属性将由系统设置,用户在布局文件中设置的
padding会被忽略。系统会为该View设置一个paddingTop,值为statusbar的高度。fitsSystemWindows默认为false。

作者:flaming
链接:https://www.jianshu.com/p/5cc3bd23be7b
來源:简书


这样问题就很明显了,本来设置的

android:layout_margin="@dimen/x5“
在调用fitSystemWindows之后,toolbar新增了一个属性,paddingTop值为状态栏的高度,造成了变形,
那么只要把layout_marginTop属性去掉,只保留左边的边距,就可以正常显示了吧

  android:layout_marginLeft="@dimen/x5",问题解决





Android设置透明状态栏以及隐藏状态栏 在很多情况下,我们都需要让项目的某个界面状态栏设置为透明或者直接隐藏起来,这样使我们的界面看起来整体美观大方一些。下面来给大家演示一下如何将Android状态栏设置为透明或者将状态栏隐藏起来。... 阅读详情

相关推荐

Android开发必知:fitsSystemWindows的正确使用姿势(附常见问题排查)

本文深入解析Android开发中fitsSystemWindows属性的正确使用方式,涵盖其核心机制、实际应用场景与最佳实践,并提供常见问题的解决方案。帮助开发者优雅处理系统UI适配问题,实现沉浸式体验,提升应用兼容性和用户体验。

weixin_29306261的博客 402

Java安卓改图标_andorid o 设置icon改变

01-29 22:45:57.546 2096 2096 E AndroidRuntime: java.lang.IllegalArgumentException: path must be convex01-29 22:45:57.546 2096 2096 E AndroidRuntime: at android.graphics.Outline.setConvexPath(Outli...

weixin_42349182的博客 286

(AS笔记)Android全透明沉浸式主题样式——顶部状态栏+底部导航栏

本章介绍实现Android沉浸式主题样式,从状态栏设置单一颜色,半透明、全透明、底部导航栏半透明等方面实践截图完成沉浸效果。

张松的博客 8690

Android中fitsSystemWindows详解

1.定义 frameworks/base/core/res/res/values/attrs.xml <!-- Boolean internal attribute to adjust view layout based on system windows such as the status bar.If true, adjusts the padding of this view to leave space for the system windows. Will only take eff

螃蟹变异了的专栏 8294

VLM,VLA,VLN的区别与联系

VLM 提供了理解世界的“眼睛和大脑”,VLN 赋予了这个智能体在空间中“移动的双腿”,而 VLA 则进一步赋予了它“灵巧的双手”来改变世界。三者共同构成了一个完整具身智能体的核心能力模块。

l0409044222的博客 1311

逆向分析踩坑记:当Frida在x86模拟器上‘看不见’ARM的so文件时,我们该如何手动定位与验证?

本文探讨了在x86模拟器上使用Frida进行逆向分析时,无法检测到ARM架构so文件的解决方案。通过分析内存映射、Frida的视觉盲区及手动定位技术,提供了兼容层、混合调试和原生ARM环境三种实用方案,帮助逆向工程师突破工具限制,实现精准定位与验证。

weixin_27697385的博客 221

再学一遍android:fitsSystemWindows属性

可以看到,这里我们在ImageView的外面又包裹了一层CollapsingToolbarLayout,并且给CollapsingToolbarLayout也设置了android:fitsSystemWindows属性,这样CollapsingToolbarLayout就可以将内容延伸到状态栏区域了。可以看到,当监听到WindowInsets发生变化时,我们调用systemWindowInsetTop即可获取到状态栏的高度,然后对不需要延伸到状态栏区域的控件进行相应的偏移即可。

winskyan的专栏 1599

STM32 ADC+DMA实战:手把手教你驱动XGZP6847A压力传感器(附完整代码)

本文详细介绍了如何使用STM32的ADC和DMA外设驱动XGZP6847A压力传感器,包括硬件连接、ADC配置、DMA高效传输实现以及数据处理与校准方法。通过实战案例和完整代码,帮助开发者快速掌握高精度压力数据采集技术,适用于工业控制和医疗设备等领域。

weixin_42570484的博客 404

android:fitsSystemWindows属性的用法

Android中fitsSystemWindows属性的用法总结 fitsSystemWindows属性是我在学习沉浸式模式时候涉及到的一个知识点,因为涉及到Android不同版本间的区别,所以当时也是云里雾里的,所以今天特意整理一下这个属性。

liugec的博客 1万+

Tessent --- PDL

当关联的ICL模块是当前ICL顶部模块时,即当它与当前设计匹配时,只能iCall一个iTopProc。但是,可以在iTopProc内调用iCall iProc或iTopProc。为指定后续iProc命令引用的ICL模块,发出这个命令之后,随后定义的iProc都会对应的ICL模块进行定义。为后续iCall调用,当使用iCall命令调用该过程时,参数列表中的变量将被替换为iCall命令中指定的值。在调用iProc时,运行iProc内的命令。PDL是面向工程师的,工程师利用PDL语言,对ICL中的单元进行控制。

qiantianyiqian的博客 2783

【C++】lambda表达式

本篇文章我们要学习的是lambda表达式,它是C++11新增的一种特别方便的语法,相较于之前的函数指针以及仿函数都方便了不少,下面就让我们一起来学习吧。

malloc不出对象的博客 2630

android:fitSystemWindows详解

从Android 4.4开始,Android系统加入了一个比较酷的功能,就是我们可以设置状态栏的的颜色了,有个这个功能,状态栏就不再是黑乎乎的了,我们就可以根据我们应用的主色去设置状态栏的颜色,使得应用体验变得好一些,所以我们通过如下方式设置状态栏透明。window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, Window

Kobe_Gong_5的专栏 1万+

别再死磕官方文档了!用宿舍开黑的故事,5分钟搞懂Autosar CanNM网管报文

本文通过宿舍开黑游戏的生动类比,深入浅出地解析了Autosar CanNM网管报文的工作原理。从游戏队友协作到汽车ECU节点的同步机制,详细介绍了网管报文的唤醒流程、通信协议及休眠策略,帮助读者快速掌握这一关键技术。

weixin_30463341的博客 261

Android沉浸式导航栏 android:fitsSystemWindows 属性失效问题

Android 沉浸式导航栏适配;fitsSystemWindows 属性失效

Vi_ta_min的博客 1356

从时序参数到电压供给:TTL(RGB)液晶屏驱动调试全解析

本文全面解析TTL(RGB)液晶屏驱动调试的关键技术,从时序参数配置到电压供给系统搭建,详细介绍了同步信号参数、寄存器配置技巧以及升压电路设计。通过实战案例和常见故障分析,帮助工程师快速掌握液晶显示屏调试方法,提升开发效率。

weixin_30588675的博客 247

46、大数据助力SDN优化流量管理与控制器

本文探讨了大数据在软件定义网络(SDN)中的应用,重点分析了如何利用大数据技术优化SDN控制器的可扩展性和弹性。通过介绍SDN控制器的核心功能及其面临的挑战,提出了集中式、分布式、混合式和分层式控制器放置策略,并结合大数据分析系统架构与技术,详细阐述了在控制器放置优化、流聚合和备份路径识别等场景中的实际应用。文章还给出了大数据分析在SDN控制器优化中的操作流程与优势,展望了未来结合人工智能与物联网的发展方向,强调了数据安全与算法效率的重要性。

xx56789的博客 86

Android 沉浸式总结

本文总结了Android实现沉浸式状态栏的几种方法。首先需要设置透明状态栏主题,并通过fitsSystemWindows属性控制视图与系统栏的交互。测试发现,单独使用FrameLayout加该属性无效,而CoordinatorLayout能使其生效,因其内部处理了该属性标记。两种实现方案:1) CoordinatorLayout结合CollapsingToolbarLayout,可实现图片延伸至状态栏;2) 直接使用FrameLayout时,需通过代码设置SYSTEM_UI_FLAG_LAYOUT_FULL

xiangxiongfly 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android透明状态栏和导航栏方案最终版

仔细留意常用App,就会发现有些 App 的状态栏和导航栏有透明效果,或者是沉浸式效果,比如QQ音乐客户端,是像这个样子的我们看到整个页面顶部与导航栏浑然一体,在看导航栏,虽然我们打开了手机导航栏,但是整个页面,还是延伸到了导航栏底部,这种创意,既保证了用户操作不受影响,整个听歌页面,非常协调大气,也最大限度利用了屏幕空间,虽然只是简单的改变,但相对于传统的上下两个黑条来说,视觉效果会美观很多。这就是今天要介绍的技术点,Android透明状态栏和导航栏。

工宗浩生财指南针 6564

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android /system,android:fitSystemWindows详解

从Android 4.4开始,Android系统加入了一个比较酷的功能,就是我们可以设置状态栏的的颜色了,有个这个功能,状态栏就不再是黑乎乎的了,我们就可以根据我们应用的主色去设置状态栏的颜色,使得应用体验变得好一些,所以我们通过如下方式设置状态栏透明。window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,Windo...

weixin_39715834的博客 417

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android 沉浸式状态栏的实现

​ 一提到沉浸式状态栏,第一个浮现在脑海里的词就是“碎片化”。碎片化是让 Android 开发者很头疼的问题,相信没有哪位开发者会不喜欢“write once, run anywhere”的感觉,碎片化让我们不得不耗费精力去校验代码在各个系统版本、各个机型上是否有效。因此以前我一直把沉浸式状态栏看作一块难啃的骨头,但是该面对的问题迟早还是要面对,所以,不如就此开始吧。 沉浸式状态栏的实现 方法一:通过设置 Theme 主题设置状态栏透明 因为 API21 之后(也就是 android 5.0 之后)的状态栏

Grekit_Sun的博客 2329

Android中fitsSystemWindows简单学习总结

Android中fitsSystemWindows总结 属性说明:fitsSystemWindows让添加了该属性的View可以根据窗口来调整View的布局位置,就是要考虑系统的窗口的位置。 使用条件:第一:只有当系统设置为了透明状态(透明状态栏和透明导航栏)或者去掉系统自带的标题栏的是时候才管用。 ​ 第二:android版本必须是在 Android4.4及以上的系统,因为4.4以下的系统StatusBar没有透明状态。 android:fitsSystemWin

qq_39524768的博客 525

android沉浸式状态栏、fitsSystemWindows、标题栏折叠

现在大部分android手机都是android4.4以上,都支持开发者可以自定义状态栏色值,原来的黑底白字时代已过去。在android5.0上我们还可以自定义状态栏文字色值,让其显示深色字体。一、沉浸式状态栏的实现实现沉浸式状态栏效果,一般有两种方式:1、设置系统主题,在styles.xml中设置,在相应需要实现的界面里设置其android:theme主题。需要根据不同机器版本设置多个styles.

smileiam的专栏 3万+

android输入法弹出调整布局与沉浸式状态栏冲突+fitSystemWindows()被弃用问题

输入法弹出,界面自动响应 当输入法出现时,为确保系统将布局大小调整为可见,可使用清单的<activity>元素中 android:windowSoftInputMode="adjustResize"。 而为使 adjustResize元素可以成功起作用,要在activity的根布局上添加fitsSystemWindows="true"。 输入法弹出响应与沉浸式状态栏冲突 但如果此时页面是沉浸式状态栏状态,则会发现沉浸式失效、状态栏颜色异常。原本延伸至状态栏的显示内容,被顶了...

wu2007369的博客 2675

Android设置透明状态栏、导航栏

在android4.4之前,状态栏一直都是黑色的,在android4.4引入了windowTranslucentStatus属性,使开发者可以实现给状态栏设置颜色,如下图所示:                                                                       实现透明状态栏和导航栏可以通过java代码和设置主题两种方式: 方式一:在代...

Yzw_92_4_11的博客 6141

Android输入法遮挡了输入框,使用android:fitsSystemWindows="true"后界面顶部出现白条

问题:  1、页面布局文件: &lt;com.zhy.autolayout.AutoLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_order_detail" android:layout_width="match_parent" ...

dbmonkey的博客 6179

沉浸模式fitsSystemWindows

原文  http://blog.chengyunfeng.com/?p=905 主题 沉浸模式 根据最新的 Android 版本统计 ,4.4 以上的系统已经占有 70% 的份额了,现在新出厂的手机,只要不是500块钱以内的山寨手机也都是 5.0 系统了。所以是时候使用 fitsSystemWindows 属性了。 fitsSystemWindows

u014702999的专栏 4824
上一篇: 12306发起正晚点查询请求
下一篇: SSM框架查询到的结果对象不包含某些字段
Java_noob1
博客等级 码龄11年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值