2016-07-05 9 views
1

Можно ли программно изменить цвет фона прозрачной строки состояния?Как установить цвет фона в прозрачную строку состояния

Я установил, что моя строка состояния прозрачна, используя следующий код, поэтому я также могу иметь свой навигационный ящик в строке состояния, если строка состояния не перекрывает навигационный ящик.

<item name="android:windowDrawsSystemBarBackgrounds">true</item> 
<item name="android:statusBarColor">@android:color/transparent</item> 

Строка состояния принимает цвет фона из

<item name="colorPrimaryDark">@color/primary_dark</item>

Можно ли изменить этот цвет программно и иметь строку состояния еще быть прозрачным?

Я попытался с помощью

window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
window.setStatusBarColor(statusBarColor); 

но строка состояния имеет некрасивый темный холст над ним, что я не хочу.

Есть ли другой способ архивировать это программно? Мне нужно изменить цвет во время выполнения. Также наличие разных стилей для каждого цвета не является вариантом, поскольку пользователь должен иметь возможность выбирать цвет.

EDIT: Это то, что я имею в виду под строкой состояния, перекрывающей навигационный ящик при изменении его цвета, используя setStatusBarColor(int);. Я все еще хочу, чтобы навигационный ящик перекрывал строку состояния.

enter image description here

+0

Вы уже задавая цвет как прозрачный, поэтому вы не можете установить другой цвет на прозрачной панели. –

+0

@OnkarNene, но не существует способа изменить цвет ниже прозрачности? настройка primaryDark также изменяет его, поэтому должен быть способ изменить его, даже если он прозрачен. – qwertz

ответ

0

Используйте этот способ.

// Check if the version of Android is Lollipop or higher 
if (Build.VERSION.SDK_INT >= 21) { 

    // Set the status bar to dark-semi-transparentish 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, 
      WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 


} 

ОБНОВЛЕНИЕ:

Вместо

<item name="android:statusBarColor">@android:color/transparent</item> 

Используйте следующее:

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

UPDATE2:

styles.xml

<style name="AppTheme.NoActionBar"> 
     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
     <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
     <item name="android:statusBarColor">@android:color/transparent</item> 
</style> 

цвета.XML

<color name="colorPrimary">#0072BA</color> 
<color name="colorPrimaryDark">#004F80</color> 
<color name="colorAccent">#005D96</color> 

Выход:

без выдвижного ящика

enter image description here

с выдвижным ящиком

enter image description here

+0

К сожалению, это оставляет темный холст поверх строки состояния, чего я не хочу. – qwertz

+0

@qwertz Я не понимаю, что вы говорите .. – Ironman

+0

цвет выглядит темнее, чем должно быть, потому что андроид применяет темный оттенок поверх него при использовании 'WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS'. Также я буквально только написал в вопросе, что я уже пробовал это, и это не сработало. – qwertz

Смежные вопросы