2014-11-02 1 views
98

в моей одной деятельности я изменить цвет панели инструментов с помощью Palette, но на 5.0 устройств, использующих ActionBarActivity в status bar цвете цвета в моей теме деятельности моей colorPrimaryDark поэтому у меня есть 2 очень разных цветов, и это делает не выглядят хорошо.Изменения строка состояния цвета с AppCompat ActionBarActivity

Я понимаю, что в 5.0 вы можете использовать Window.setStatusBarColor(), но ActionBarActivity этого не имеет.

, так что мой вопрос в 5.0. Как изменить цвет строки состояния с помощью ActionBarActivity?

+0

Вы пытались использовать SystemBarTint lib? Https: //github.com/jgilfelt/SystemBarTint –

+0

Возможный дубликат [Как изменить цвет строки состояния в android] (https://stackoverflow.com/questions/22192291/ how-to-change-the-status-bar-color-in-android) – DSoldo

ответ

298

Я не уверен, что я понять проблему.

Я хочу программно изменить цвет строки состояния (и при условии, что устройство имеет Android 5.0), то вы можете использовать Window.setStatusBarColor(). Не следует иметь в виду, является ли эта деятельность производной от Activity или ActionBarActivity.

Просто попробуйте сделать:

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

Просто проверил это с ActionBarActivity и он работает нормально.


Примечание: Установка FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS флаг программно не является необходимым, если ваш файл стилей values-v21 уже он установлен уже через:

<item name="android:windowDrawsSystemBarBackgrounds">true</item> 
+1

ah ok Я не использовал 'getWindow()' – tyczj

+0

, это сработает, если код LOLLIPOP не найден в старых андроидах. его наилучшим образом использовать> = 21 – code511788465541441

+11

@ code578841441 На самом деле, этого не должно быть. Константы встроены при компиляции. – matiash

7

Я не думаю, что цвет панели состояния уже реализован в AppCompat. Эти атрибуты, которые доступны:

<!-- ============= --> 
    <!-- Color palette --> 
    <!-- ============= --> 

    <!-- The primary branding color for the app. By default, this is the color applied to the 
     action bar background. --> 
    <attr name="colorPrimary" format="color" /> 

    <!-- Dark variant of the primary branding color. By default, this is the color applied to 
     the status bar (via statusBarColor) and navigation bar (via navigationBarColor). --> 
    <attr name="colorPrimaryDark" format="color" /> 

    <!-- Bright complement to the primary branding color. By default, this is the color applied 
     to framework controls (via colorControlActivated). --> 
    <attr name="colorAccent" format="color" /> 

    <!-- The color applied to framework controls in their normal state. --> 
    <attr name="colorControlNormal" format="color" /> 

    <!-- The color applied to framework controls in their activated (ex. checked) state. --> 
    <attr name="colorControlActivated" format="color" /> 

    <!-- The color applied to framework control highlights (ex. ripples, list selectors). --> 
    <attr name="colorControlHighlight" format="color" /> 

    <!-- The color applied to framework buttons in their normal state. --> 
    <attr name="colorButtonNormal" format="color" /> 

    <!-- The color applied to framework switch thumbs in their normal state. --> 
    <attr name="colorSwitchThumbNormal" format="color" /> 

(Из \ SDK \ Extras \ Android \ поддержка \ v7 \ AppCompat \ Рез \ значения \ attrs.xml)

+1

Возможно, он никогда не будет реализован в AppCompat, если более старые версии ОС не предоставляют возможности изменять строку состояния. – TheIT

+2

45

Существуют различные способы изменения строки состояния цвета.

1) Использование styles.xml. Вы можете использовать атрибут android: statusBarColor, чтобы сделать это простым, но статическим способом.

Примечание. Вы также можете использовать этот атрибут с темой Материал.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="AppTheme" parent="AppTheme.Base"> 
     <item name="android:statusBarColor">@android:color/transparent</item> 
    </style> 
</resources> 

2) Вы можете сделать это динамически с помощью метода setStatusBarColor (INT) в классе Window. Но помните, что этот метод доступен только для API 21 или выше. Поэтому не забудьте проверить это, или ваше приложение наверняка потерпит крах на более низких устройствах.

Вот рабочий пример этого метода.

if (Build.VERSION.SDK_INT >= 21) { 
      Window window = getWindow(); 
      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
      window.setStatusBarColor(getResources().getColor(R.color.primaryDark)); 
} 

, где primaryDark - это оттенок 700 основного цвета, который я использую в своем приложении. Вы можете определить этот цвет в файле colors.xml.

Попробуйте и дайте мне знать, если у вас есть вопросы. Надеюсь, поможет.

+0

выглядит как window.clearFlags (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); не нужен - но этот работал для меня – bkurzius

+0

'getColor' все еще будет работать, но он устарел. –

+0

Любые идеи, почему программная версия будет работать, но в версии стиля нет? – Andrew

2

Попробуйте это, Я использовал это, и он отлично работает с v21.

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light"> 
    <item name="colorPrimaryDark">@color/blue</item> 
</style> 
0

Спасибо за ответы выше, с помощью тех, после некоторого R & D для применения xamarin.android MVVMCross, ниже работала

Флаг, указанный для активности в методе OnCreate

protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     this.Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds); 
    } 

Для каждой MvxActivity тема упоминается ниже:

[Activity(
    LaunchMode = LaunchMode.SingleTop, 
    ScreenOrientation = ScreenOrientation.Portrait, 
    Theme = "@style/Theme.Splash", 
    Name = "MyView" 
    )] 

Моя SplashStyle.xml выглядит, как показано ниже

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar"> 
      <item name="android:statusBarColor">@color/app_red</item> 
      <item name="android:colorPrimaryDark">@color/app_red</item> 
    </style> 
</resources> 

И я V7 appcompact говорил.