Android材質:狀態欄顏色不會改變



3 Answers

雖然不支持著色狀態欄<5.0,但在4.4中你可以使用一種解決方法來獲得更暗的顏色:

使狀態欄保持半透明狀態

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

然後使用AppCompat的工具欄為您的appbar,確保它適合系統窗口:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    ...
    android:fitsSystemWindows="true"/>

確保將工具欄設置為活動的工具欄:

protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ...
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

工具欄在狀態欄下方伸展,狀態欄的半透明度使其看起來是較暗的二級顏色。 如果這不是您想要的顏色,則此組合允許您在狀態欄下方放置一個視圖,該視圖具有您選擇的背景顏色(儘管狀態欄的顏色仍然較暗)。

由於4.4只有一種邊緣情況解決方法,但是你去了。

Question

我正在開發一個簡單的應用來測試材料設計。 我正在使用com.android.support:appcompat-v7:21.0.0 ,我的活動如下:

public class MyActivity extends ActionBarActivity {
   ...
}

佈局定義為:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MyActivity">

    <android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="128dp"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimaryDark"/>
</LinearLayout>

現在我按照材料指南定義了我的主題:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary500</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark700</item>
</style>

我想在Android 5之前更改狀態欄顏色並將其設置為colorPrimaryDark但我找不到方法。 我試過用:

getWindow().setStatusBarColor(..)

但是setStatusBar顏色可以從21級獲得。為什麼我在我的主題中定義了colorPrimaryDark並使用appcompact狀態欄不會改變顏色? 有人可以幫忙嗎?




正如其他人也提到過的,可以通過將以下內容添加到Activity的onCreate()來輕鬆解決:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.primary_dark));
    }

但是,我想在此添加的重點是,在某些情況下,即使上面也不會改變狀態欄顏色。 例如,當使用MikePenz庫導航抽屜時,它會明顯覆蓋狀態欄顏色,因此您需要手動添加以下內容才能使其工作:

.withStatusBarColorRes(R.color.status_bar_color)




切換到AppCompatActivity並在工具欄上添加25 dp paddingTop並打開

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

然後,將工具欄放在頂部




Make Theme.AppCompa t style parent

<style name="AppTheme" parent="Theme.AppCompat">
     <item name="android:colorPrimary">#005555</item>
     <item name="android:colorPrimaryDark">#003333</item>
</style>

並在onCreate()放入getSupportActionBar().getThemedContext() onCreate()

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        getSupportActionBar().getThemedContext();
}



Related