Android 沉浸式/透明式状态栏、导航栏
Android 从4.4开始引进透明状态栏和导航栏的概念,并且在5.0进行了改进,将透明变成了半透明的效果。虽然此特性最早出现在ios,但不否认效果还是很赞的。 至于4.4以下的手机,就不要考虑此特性了,好在4.4以下的手机份额已经非常小了。 我们先来看一下透明状态栏的实现,两种常见效果图如下: 虚拟导航栏并不是所有的手机都有,华为的手机多比较常见,就是上图屏幕底部按钮那块区域。设置导航栏和状态栏类似: 这是官方的解释,大致意思就是我们在布局的最外层设置 android:fitsSystemWindows="true",会在屏幕最上方预留出状态栏高度的padding。 由于fitsSystemWindows属性本质上是给当前控件设置了一个padding,所以我们设置到根布局的话,会导致状态栏是透明的,并且和窗口背景一样。 但是多数情况,我们并不在根布局设置这个属性,我们想要的无外乎是让内容沉浸在状态栏之中。所以我们经常设置在最上端的图片背景、Banner之类的,如果是Toolbar的,我们可以使用一层LinearLayout包裹,并把这个属性设置给LinearLayout,这样就可以避免Toolbar的内容下沉了。如: 上述方法可以解决普通页面的透明式状态栏需求,如有复杂需求可以参考下面这些: Android 系统状态栏沉浸式/透明化完整解决方案 Android 沉浸式状态栏的实现 Android沉浸式状态栏(透明状态栏)最佳实现 还有开源库推荐: ImmersionBar
Android 状态栏透明
前言:最近项目大量用到状态栏透明,网上也出现很多库可以直接拿来用,个人认为没有必要那么重引用到一个库(有木有同学和我有一样的想法),所以研究了一番,在此做个记录加强记忆也便后期查阅,如果无意中有幸能帮助到你那就再好不过了。 Android 从 4.4 (SDK 19) 开始支持 系统栏(状态栏+导航栏)半透明 效果: 翻译一下就是: TranslucentDecor 主题设置了两个属性 windowTranslucentStatus 和 windowTranslucentNavigation 都为 true,前者指定状态栏半透明、后者指定导航栏半透明。 本文只探讨“状态栏” 。 默认样式是这样: 可见 Toolbar 和系统状态栏之间有明显的分界,我们要实现的效果是 Toolbar 和状态栏背景统一,看起来像是一个整体(自行脑补图片)。 按照官方文档,我们自定义主题: 对应的 Activity 引用该主题: 我看来看看效果: 虽然实现了半透明,但是布局被状态栏覆盖,接下来在布局文件中设置 fitSystemWindows (注意加到根节点 ConstraintLayout 上): 来看看效果: 虽然布局没有被状态栏覆盖,但是状态栏背景显然这不是我们想要的效果😭 为什么状态栏会这么奇怪? 文章开头的定义中我们说了,布局文件会延伸到状态栏所占区域下, fitsSystemWindows 的作用是给对应的 View 增加 padding(这里以 ConstraintLayout 为例),目的是为了让其内容不被状态栏遮挡。 在我们的布局文件中 ConstraintLayout 没有设置背景(默认白色),所以状态栏默认的半透明背景色和 ConstraintLayout 的白色背景叠加,就变成了上图中的效果。 【总结】两个基本概念: 1、 windowTranslucentStatus 设置为true之后,状态栏默认是 半透明 的(4.4 是黑色到透明色渐变,5.0+ 是纯黑色半透明),和我们要求的 透明 相去甚远。更重要的是,布局会延伸到状态栏底下。 2、 android:fitsSystemWindows 简单理解 就是 View 为了适配系统状态栏和导航栏(不被遮挡)自动 增加 padding ,当然真正的实现原理比这复杂很多而且不同的 View 可以自定义实现方式。 所以,为了实现文章开头提出来的“状态栏透明”效果,我们需要处理: 设置 windowTranslucentStatus 为 true,让状态栏半透明。 在根节点设置 android:fitsSystemWindows 使其不被状态栏遮挡。 Android 4.4 暂时没有办法去掉状态栏的渐变。 Android 5.0+ 开始支持修改状态栏颜色,设置透明色即可把半透明去掉。 看看效果: 我们看到即使状态栏透明了,但是其底色是一片白,因为跟节点 ConstraintLayout 没有设置背景,大多情况下我们不会给整个跟节点设置颜色,可以考虑把 android:fitsSystemWindows 设置到子 View 上,本例中是 AppBarLayout (5.0+ 无效,只能显式给 AppBarLayout 加 padding,可以利用其背景色),实际项目中可灵活调整。 最终效果: 至此,完成状态栏透明效果,网上有很多库,实际上都是基于此原理,在此基础上再自定义 View 做为状态栏背景。 https://developer.android.com/about/versions/android-4.4.html
怎样将android控件背景设置成透明?
1、打开安卓的配置文件。2、只需要在配置文件中把需要设置为透明的activity的样式设置为android:theme="@android:style/Theme.Translucent"3、这样就可以把背景设置为透明。以下是自定义主题,设置Activity透明且无标题的方法。第一步:color文件中#99000000//前两位为透明度数值越小透明度越好。第二步: style文件中@color/transparenttrue@android:style/Animationtrue//设置是否要去掉标题第三步:清单文件中引用。注:如果你所设置的Activity是继承AppCompatActivity需要将其改为继承Activity。