2016-04-01 13 views
2

Как установить цвет для строки состояния в android?Как установить цвет для панели состояния в android

Я пробовал как в styles.xml, так и в .java-файле.

Если я пытаюсь следующий код в .java классе

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) { 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
     getWindow().setStatusBarColor(getResources().getColor(Color.DKGRAY)); 
    } 

я получаю как исключение называется: -ResourceNotFoundException

04-01 18:55:21.616: E/AndroidRuntime(2169): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.cz/com.myapp.casenotez.updateCase}: android.content.res.Resources$NotFoundException: Resource ID #0xff444444 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.os.Handler.dispatchMessage(Handler.java:102) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.os.Looper.loop(Looper.java:148) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.app.ActivityThread.main(ActivityThread.java:5417) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at java.lang.reflect.Method.invoke(Native Method) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
04-01 18:55:21.616: E/AndroidRuntime(2169): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0xff444444 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.content.res.Resources.getValue(Resources.java:1351) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.content.res.Resources.getColor(Resources.java:963) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.content.res.Resources.getColor(Resources.java:936) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at com.myapp.cz.updateCase.onCreate(updateCase.java:112) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.app.Activity.performCreate(Activity.java:6237) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
04-01 18:55:21.616: E/AndroidRuntime(2169): ... 9 more 

И я также попробовал, добавив стили в styles.xml: -

<!-- Application theme. --> 
<style name="AppTheme" parent="AppBaseTheme"> 
    <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
    <item name="android:actionBarStyle">@style/MyActionBar</item> 
</style> 

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> 
    <item name="android:background">#630</item> 
    <item name="android:titleTextStyle">  @style/MyActionBarTitle</item> 
</style> 
<style name="MyActionBarTitle" parent="@android:style/TextAppearance"> 
    <item name="android:textColor">@color/Blue</item> 
</style> 
+0

Проверьте этот HTTP: // переполнение стека.com/a/27093330/4790490 – Hearty

+1

Я не думаю, что вам нужно вызвать 'getResources(). getColor (Color.DKGRAY))' Я думаю, вы можете просто перейти в 'Color.DKGRAY'. Ошибка говорит, что он пытается получить «Идентификатор ресурса # 0xff444444», но это шестнадцатеричное значение для твердого темно-серого цвета. –

ответ

4

Color.DKGRAY уже правильно сформированный цвет int. Вы можете просто использовать

getWindow().setStatusBarColor(Color.DKGRAY); 

Вам нужно использовать только Resources.getColor() если вы решение идентификатор цвета ресурса, например, так:

<resources> 
    <color name="dark_gray">#ff444444</color> 
</resources> 

getWindow().setBackgroundColor(getResources.getColor(R.color.dark_gray)); 

В этом случае R.color.dark_gray не цвет ИНТ, это идентификатор ресурса. В этом разница.

EDIT

Вы можете легко установить статус бар цвет в вашей теме вместо этого. Обратите внимание, что он действует только на Lollipop и выше. Вы можете использовать полупрозрачную строку состояния на KitKat. Если вы сделаете это так, вам не нужен какой-либо java-код для установки флажков окна.

Обратите внимание, что я предполагаю, что вы используете библиотеку AppCompat. Если вы этого не сделаете, вы, вероятно, должны это сделать.

в RES/значений/styles.xml:

<!-- Extend from any AppCompat theme --> 
<style name="AppTheme" parent="Theme.AppCompat"> 
    <!-- put your theme customizations in here --> 
</style> 

<style name="AppTheme.TranslucentStatus" /> 

в RES/значения-19/styles.xml:

<style name="AppTheme.TranslucentStatus"> 
    <item name="android:windowTranslucentStatus">true</item> 
</style> 

в RES/значения-21/styles.xml:

<style name="AppTheme.TranslucentStatus"> 
    <item name="android:statusBarColor">#ff444444</item> 
</style> 

Использовать AppTheme.TranslucentStatus о деятельности, которая должна иметь полупрозрачную строку состояния.

+0

OKay .. Спасибо .. :) И Можно ли установить цвет строки состояния в style.xml? В приведенном выше коде, который я разместил в вопросе ... Он меняет только цвет текстов панели действий, а не в строке состояния.? – Karan

+0

@Karan См. Мое редактирование – Karakuri

1

Этот метод доступен в API Level 21, поэтому вы можете проверить , что настройка Target Framework настроена как в пределах параметров проекта.

And, you will need to include a check like this to verify 

это выполняется только при запуске на леденец (API 21) или выше:

   if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) 
       { 
        Window.ClearFlags(WindowManagerFlags.TranslucentStatus); 
        Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds); 
        Window.SetStatusBarColor(Android.Graphics.Color.Blue); 
       } 

Или вы можете попробовать эту функцию ...

public void setStatusBarColor(@ColorRes int statusBarColor) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    int color = ContextCompat.getColor(this, statusBarColor); 

    Window window = getWindow(); 
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
    window.setStatusBarColor(color); 
    } 
} 
+0

OKay .. Спасибо .. :) И Можно ли установить цвет строки состояния в style.xml? В приведенном выше коде, который я разместил в вопросе ... Он меняет только цвет текстов панели действий, а не в строке состояния.? – Karan