我已经将我的statusBar颜色设置为Lollipop的透明颜色,仅在我的主题中使用以下行:
<item name="android:statusBarColor">@android:color/transparent</item>
Run Code Online (Sandbox Code Playgroud)
现在我需要在它背后绘制,但我不能得到它背后的任何视图.我知道如何使用windowTranslucentStatus属性,但不想使用此属性,因为它将忽略statusBar设置为透明的颜色.
我在Marshmallow上尝试AppCompat.我希望有一个透明的状态栏,但它会变成白色.我已经尝试了几个解决方案,但它们对我不起作用(透明状态栏不能使用windowTranslucentNavigation ="false",Lollipop:绘制后面的statusBar,其颜色设置为透明).这是相关的代码.
我的styles.xml
<style name="Bacon" parent="Theme.Bacon"/>
<style name="Theme.Bacon" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/theme_primary</item>
<item name="colorPrimaryDark">@color/theme_primary_dark</item>
<item name="colorAccent">@color/theme_accent</item>
<item name="windowActionBar">false</item>
<item name="windowActionBarOverlay">true</item>
<item name="windowNoTitle">true</item>
<item name="android:windowBackground">@color/background_material_light</item>
</style>
<style name="Theme.Bacon.Detail" parent="Bacon"/>
Run Code Online (Sandbox Code Playgroud)
V21
<style name="Bacon" parent="Theme.Bacon">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
<style name="Theme.Bacon.Detail" parent="Bacon">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
Run Code Online (Sandbox Code Playgroud)
活动
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
分段
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="192dp"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginBottom="32dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed" …Run Code Online (Sandbox Code Playgroud) android android-appcompat android-support-library androiddesignsupport android-6.0-marshmallow
我知道在Android 4.4 KitKat(API 19)中,可以使状态栏透明.
但是,例如,Go Launcher Ex和其他人可以选择让它变得透明,而且它也适用于预装KitKat,对我来说(Android 4.3(Jelly Bean))以及我的Android 4.0(冰淇淋三明治)设备.
我不需要root或任何特殊权限来使用它.
下载Go Launcher Ex并亲自试用.对我来说,如果我需要root也可以.
但是他们是怎么做到的?如何在预KitKat设备上使Android的状态栏保持半透明状态?
---澄清事情---
看这些示例图片:
(注意,这是从我的股票银河笔记3中获取的Android 4.3和Go Launcher Ex.)
(同样适用于我的Galaxy S2和Android 4.0.)
没有透明的状态栏:

随着启用透明状态栏:(我想要实现这个预先4.4(API 19)设备)

我创建了一个包含2个活动的简单应用程序.主(启动器)活动以适当的方式主题colorPrimaryDark应用于状态栏.但是当我转换到新活动时,除状态栏外,一切似乎都正常.它以某种方式着色为白色.知道为什么会发生这种情况吗?
在OnePlus One(Lollipop 5.0.2)上运行
目标api - > 16+

价值观/ styles.xml
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/PrimaryColor</item>
<item name="colorPrimaryDark">@color/PrimaryDarkColor</item>
<item name="colorAccent">@color/accent</item>
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
Run Code Online (Sandbox Code Playgroud)
值-V21/styles.xml
<style name="AppTheme" parent="AppTheme.Base">
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowSharedElementEnterTransition">@android:transition/slide_bottom</item>
<item name="android:windowSharedElementExitTransition">@android:transition/move</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
Run Code Online (Sandbox Code Playgroud)
布局/ activity_settings.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#856"
android:fitsSystemWindows="true"
android:orientation="vertical"
tools:context=".SettingsActivity">
<include layout="@layout/toolbar" />
</LinearLayout>Run Code Online (Sandbox Code Playgroud)
我知道我可以colorPrimary用来确定颜色Toolbar,并colorPrimaryDark确定状态栏的颜色.
我正在使用以下主题
<!-- Base application theme. -->
<style name="Theme.Noteplus.Base.Brown" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimaryLight</item>
<item name="colorPrimaryDark">#ff0000</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
Run Code Online (Sandbox Code Playgroud)

其中一个有趣的属性是,当我滑出导航菜单时,状态栏会自动变为透明状态.

在运行期间,有时我想更改状态栏的颜色.
setTitle("Recycler bin");
toolbar.setBackgroundColor(Color.BLUE);
getWindow().setStatusBarColor(Color.parseColor("#5694FF"));
Run Code Online (Sandbox Code Playgroud)
它看起来如下

不幸的是,setStatusBarColor当我们滑出导航菜单时,调用也会丢失状态栏的透明度属性.

我可以知道,如何在运行时更改状态栏颜色,而不会损失其透明属性?对于我的情况,在运行期间将状态栏更改为蓝色后,当我滑出导航抽屉时,我希望看到状态栏透明度属性被保留.
我试过了
private void setStatusBarColor(int color) {
if (Build.VERSION.SDK_INT >= 21) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(color);
}
}
Run Code Online (Sandbox Code Playgroud)
导航抽屉滑出时,提供透明属性无效.

android android-layout android-view drawerlayout windowinsets
我使用Android Studio中的默认模板使用CoordinatorLayout.
但是,当我向下滚动时,通知栏(状态栏)将滚出屏幕.这个效果可以在这个视频中看到. https://youtu.be/1oAqEpg7N4I
我已经包含了相关部分,但其余代码可以在这里找到:https: //github.com/vidia/MaterialDiningCourts/blob/master/app/src/main/res/layout/activity_meal_view.xml
在演示(cheesesquare)中,行为是我所期望的,将通知栏留在原位并且工具栏在其下方滚动.我已经搜索了这些布局并对我的代码进行了更改以匹配它们,但是无法找到必要的更改.
是什么导致通知栏滚动页面,为什么Android Studio中的示例有这种不正确的行为?
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MealViewActivity">
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<Spinner
android:id="@+id/meal_chooser_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</android.support.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTabLayout"
android:foregroundGravity="top"
app:tabIndicatorColor="@color/tabSelectedIndicatorColor"/>
</android.support.design.widget.AppBarLayout>
Run Code Online (Sandbox Code Playgroud)
和styles.xml,虽然我已经从这个文件中删除了我的自定义主题,但它没有帮助解决这个问题.
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item> …Run Code Online (Sandbox Code Playgroud) android ×6
statusbar ×2
android-ui ×1
android-view ×1
drawerlayout ×1
java ×1
transparent ×1
windowinsets ×1