Как сделать плавный переход между полупрозрачным StatusBar и ActionBar? - PullRequest
0 голосов
/ 25 января 2019

Я пытался поиграть с цветами, но затем граница становится более резкой.

enter image description here

My 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 голосов
/ 25 января 2019

Внешний вид строки состояния с android:windowTranslucentStatus контролируется системой.Атрибут существует начиная с Kitkat, где он вызывает градиент от черного верха к прозрачному дну.На AOSP Lollipop это заменяется на solid #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>
...