首页源码android半透明(为什么Android要支持半透明)

android半透明(为什么Android要支持半透明)

编程之家2024-06-09214次浏览

一、android 怎么给一块区域设置背景半透明

activity的背景透明,只需在只要在配置文件内activity属性配置内加上android:theme="@android:style/Theme.Translucent"就好了。

android半透明(为什么Android要支持半透明)

但是想要多方面的设置theme的话,就要在values里设置风格先:

加透明:

先在res/values下建colors.xml文件,写入:

<?xmlversionxmlversion="1.0"encoding="UTF-8"?>

<resources>

<colornamecolorname="transparent">#9000</color><!--透明度-->

android半透明(为什么Android要支持半透明)

</resources>

这个值设定了整个界面的透明度,为了看得见效果,现在设为透明度为56%(9/16)左右。

透明度可以用#9000值调,将这个值(ARGB)改变,就会有不同效果的透明度。

再在res/values/下建styles.xml,设置程序的风格

<?xmlversionxmlversion="1.0"encoding="utf-8"?>

<resources>

android半透明(为什么Android要支持半透明)

<stylenamestylename="Transparent">

<item name="android:windowBackground">@color/transparent</item>

<item name="android:windowIsTranslucent">true</item>

<item name="android:windowAnimationStyle">@+android:style/Animation.Translucent</item>

</style>

</resources>

加了@+android:style/Animation.Translucent这句的时候就会显示出此activity会有动画切换效果

最后一步,把这个styles.xml用在相应的Activity上。即在AndroidManifest.xml中的任意标签中添加 android:theme="@style/transparent"

如果要设置所有的activity都使用这个风格,就把这句标签语句添加在中。

二、为什么很多 Android apps 仍不适配透明状态栏

我觉得有几个原因:

1.android目前支持你说的透明状态栏只有android5.0及5.0以上的版本。而市面上仍有很多低于5.0以下的手机。

2.google官方推荐开发者开发Material风格的app,但我在市面上极少见到过具有Material风格的商业应用。这说明这种理念还不够普及。

3.最重要的一点,状态栏在手机应用上只占据了很小的一块区域。更多的人觉得没有必要做这种沉浸式的状态栏。在我看来沉浸式的状态栏能提高用户体验,让整个应用的风格统一化,开发的时候,需求文档里没有提及的并且只要我觉得合适,我都会尝试做沉浸式的状态栏的。

三、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做为状态栏背景。

优选法?优选法在生活中的应用卡方检验spss,卡方检验结果怎么解读