2017-03-22 11 views
1

StatusBarの色をプログラマチックに変更しようとしていますが、成功しません。私はMaterialDrawerライブラリを使ってnav drawer btwを作成しています。MaterialDrawerライブラリを使用してステータスバーの色を変更できません

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
       Window window = getWindow(); 
       window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
       window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
       window.setStatusBarColor(Color.BLUE); 
} 

はまた、テーマを試してみました:

if (dark) 
    setTheme(R.style.AppTheme_Dark_NoActionBar); 
else 
    setTheme(R.style.AppTheme_NoActionBar); 


<style name="AppTheme.Dark.NoActionBar" parent="MaterialDrawerTheme"> 
    <item name="android:colorPrimary" tools:targetApi="lollipop">#ffffff</item> 
    <item name="android:colorPrimaryDark" tools:targetApi="lollipop">#cfcfcf</item> 
    <item name="android:statusBarColor">#cfcfcf</item> 
    <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
    <item name="android:windowTranslucentStatus">true</item> 
    <item name="android:colorAccent" tools:targetApi="lollipop">@color/md_black_1000</item> 
    <item name="android:windowContentTransitions" tools:targetApi="lollipop">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="drawerArrowStyle">@style/MaterialDrawer.DrawerArrowStyle.Black</item> 
    <item name="android:datePickerDialogTheme">@style/DatePickerDialogThemeDark</item> 
    <item name="android:timePickerDialogTheme">@style/DatePickerDialogThemeDark</item> 
</style> 

<style name="AppTheme.NoActionBar" parent="AppTheme"> 
     <item name="windowActionBar">false</item> 
     <item name="android:colorAccent" tools:targetApi="lollipop">@color/primary</item> 
     <item name="windowNoTitle">true</item> 
     <item name="android:statusBarColor">@color/colorPrimaryDark</item> 
     <item name="android:datePickerDialogTheme">@style/DatePickerDialogThemeLight</item> 
     <item name="android:timePickerDialogTheme">@style/DatePickerDialogThemeLight</item> 
    </style> 

<style name="AppTheme" parent="MaterialDrawerTheme.Light"> 
    <item name="android:colorPrimary" tools:targetApi="lollipop">@color/colorPrimary</item> 
    <item name="android:colorPrimaryDark" tools:targetApi="lollipop">@color/colorPrimaryDark 
    </item> 
    <item name="android:colorAccent" tools:targetApi="lollipop">@color/md_blue_300</item> 
    <item name="android:windowContentTransitions" tools:targetApi="lollipop">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="lollipop">true</item> 
    <item name="drawerArrowStyle">@style/MaterialDrawer.DrawerArrowStyle</item> 
</style> 

そして最後に、私はインターネットで見つかりましたが、誰が働いていない、ステータスバーが常にprimaryDark

はプログラム的にしようとしたショー

しようとしました貴様のソリューションこのMaterialDrawerライブラリのコードを使用してみました:

drawer.getDrawerLayout().setStatusBarBackgroundColor(color); 

drawerは、DrawerBuilderの結果です。このアプリは、ユーザーがログイン/レジスタに入力したいくつかの変数に応じて、2つの原色を持っています。この色は青と白です。私が上に掲示したコードを使用しても、StatusBarがprimaryDarkで色付けされていることを除いて、アプリケーションは素晴らしいです。私は色を変えることができる唯一のモードはcolorPrimary変更または色にこれを置くことです:

<color name="materialize_primary_dark">@color/md_red_500</color> 

しかしprimaryDarkがそうであるように、色を変更し、私はホワイトモードと青のための青のために白に、それを変更する必要がありますモード。

ありがとうございました。

+0

削除THOSの一部を参照することができます "window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);" おそらくそれは動作します! –

+0

試しましたが、色は変わりません。私はそれを上書きするMaterialDrawerのものだと思いますが、わかりません。 – VictorBG

答えて

2

はできるだけ早くあなたがfitsSystemWindows旗を持っているあなたのViewのルートでDrawerLayoutを持っているように、ステータスバーの色は、このビュー"scrim"によって管理されます。

public void setStatusBarColor(@ColorInt int color){ 
    drawer.getDrawerLayout().setStatusBarBackgroundColor(color); 
} 
+0

すべてのスタイルとMainActivityを再度書き直すエラーを解決しました。最後にエラーが見つかりませんでしたが、この回答を使用して、すべてを書き直した後、私は最終的に色を変更することができます。 – VictorBG

1

あなたは

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
    <item name="android:windowTranslucentStatus">true</item> 
</style> 
このスタイル-V21その使用するためのライブラリを必要としない:

は、だからあなたの場合には、あなたは動的にStatusBarの色を調整するには、以下の操作を行うことができます

引き出しのレイアウト

<FrameLayout 
     android:id="@+id/frame_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/white" /> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="@color/colorPrimary" 
     android:fitsSystemWindows="true" /><--This is mandatory 

</android.support.v4.widget.DrawerLayout> 

それとも、最初のソリューション にここで私の受け入れ答えAndroid DrawerLayout (with NavigationView) behind status bar

+0

問題はライブラリに関するものではありません。これはステータスバーに関するものです。これはDrawerLayout(NavigationViewのベースでもあります)によって処理されます – mikepenz

+0

私のコードを試しましたか? –

+0

参照http://stackoverflow.com/questions/41501857/android-drawerlayout-with-navigationview-behind-status-bar/41502238#41502238 –

関連する問題