如何在半透明的StatusBar和ActionBar之间进行无缝过渡?

时间:2019-01-25 17:12:05

标签: android android-actionbar material-design android-statusbar

我尝试使用颜色,但是边框变得更清晰。

enter image description here

我的styles.xml

<style name="MyTheme" parent="AppTheme">
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTranslucentStatus">true</item>
    <!-- system_bar_background_semi_transparent 40% black -->
    <item name="colorPrimary">#66000000</item>
</style>

PS:来自模拟器(Android 9,API级别28)的屏幕截图,我无法在真实设备上进行测试。

1 个答案:

答案 0 :(得分:0)

带有android:windowTranslucentStatus的状态栏外观由系统控制。该属性自Kitkat开始存在,它将导致从黑色顶部到透明底部的渐变。在AOSP棒棒糖上,它被实心#44000000代替,但是不能依靠,因为不同的制造商以不同的方式实现了这一点。例如。我后来的Xperia L使用了与Kitkat相同的实现。

如果要完全控制状态栏颜色,请使用以下属性组合:

<!-- Make the app responsible for drawing status bar and navigation bar backgrounds. -->
<item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="lollipop">true</item>
<!-- Change the status bar background to whatever you want. -->
<item name="android:statusBarColor" tools:targetApi="lollipop">#6000</item>

半透明物体后面的暗区是高程阴影造成的。阴影被绘制在整个对象的后面,而不仅仅是周围。您可以像这样从操作栏中删除阴影:

<style name="MyTheme" parent="AppTheme">
    <item name="actionBarStyle">@style/Widget.MyApp.ActionBar.Translucent</item>
</style>

<style name="Widget.MyApp.ActionBar" parent="@style/Widget.AppCompat.ActionBar">
    <item name="elevation">0dp</item>
    <!-- While at it you can keep normal primary color and change just the action bar background here. -->
    <item name="background">#6000</item>
</style>