Jak zmienić kolor paska stanu, aby pasował do aplikacji w lizaku? [Android]

W nowej aktualizacji lollipop zauważyłem, że w natywnych Google apps kolor paska stanu zmienia się tak, aby pasował do paska akcji w uruchomionej aplikacji. Widzę, że jest też w aplikacji Twitter, więc zgaduję, że nie tylko Google może to zrobić.

Czy ktoś wie jak to zrobić, jeśli jest to możliwe?

Author: Briscoooe, 2014-11-23

7 answers

Aby zmienić kolor paska stanu użyj setStatusBarColor(int color). Zgodnie z javadoc, musimy również ustawić kilka flag na oknie.

Roboczy fragment kodu:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(ContextCompat.getColor(activity, R.color.example_color));


Należy pamiętać zgodnie z wytycznymi projektu materiału kolor paska stanu i kolor paska akcji powinny być różne:

  • ActionBar powinien używać podstawowego koloru 500
  • StatusBar powinien używać primary 700 kolor

Spójrz na zrzut ekranu poniżej:

Tutaj wpisz opis obrazka

 212
Author: klimat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-18 09:36:54

Po prostu dodaj to do swoich stylów.xml. ColorPrimary to pasek akcji, a colorprimary to pasek stanu.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:colorPrimary">@color/primary</item>
    <item name="android:colorPrimaryDark">@color/primary_dark</item>
</style>

To zdjęcie od dewelopera android wyjaśnia więcej o palecie kolorów. Możesz przeczytać więcej na ten link .

Tutaj wpisz opis obrazka

 45
Author: Gjoko Bozinov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-25 10:15:53

Innym sposobem ustawiania koloru paska stanu jest styl .xml .

Aby to zrobić, utwórz styl .plik XML w folderze res/values-V21 o tej zawartości:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="android:colorPrimaryDark">@color/blue_dark</item>
    </style>
</resources>

Edit: Jak wspomniano w komentarzach, podczas korzystania z AppCompat kod jest inny. W pliku res / values / style.xml użyj zamiast:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">   
    <!-- Set AppCompat’s color theming attrs -->
    <item name="colorPrimary">@color/my_awesome_red</item>
    <item name="colorPrimaryDark">@color/my_awesome_darker_red</item>
    <!-- Other attributes -->
</style>
 40
Author: Alberto Malagoli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-07 21:34:07

Aby ustawić kolor paska stanu, Utwórz styl.plik xml w folderze res / values-v21 o tej zawartości:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme" parent="AppTheme">
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/blue</item>
    </style>

</resources>
 20
Author: Muhammad Aamir Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-14 09:33:33

Również jeśli chcesz mieć inny kolor status-bar dla różnych aktywności ( fragmenty) możesz to zrobić wykonując następujące kroki (praca na API 21 i wyżej):

Najpierw Utwórz values21/style.xml i umieść następujący kod:

 <style name="AIO" parent="AIOBase">
            <item name="android:windowDrawsSystemBarBackgrounds">true</item>
            <item name="android:windowContentTransitions">true</item>
    </style>

Następnie zdefiniuj białe / ciemne motywy w swoim values/style.xml Jak poniżej:

 <style name="AIOBase" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_primary_dark</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:textColorPrimary">@android:color/black</item>
        <item name="android:statusBarColor" tools:targetApi="lollipop">@color/color_primary_dark
        </item>
        <item name="android:textColor">@color/gray_darkest</item>
        <item name="android:windowBackground">@color/default_bg</item>
        <item name="android:colorBackground">@color/default_bg</item>
    </style>


    <style name="AIO" parent="AIOBase" />

    <style name="AIO.Dark" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#171717
        </item>
    </style>

    <style name="AIO.White" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#bdbdbd
        </item>
    </style>

Nie zapomnij również zastosować motywów w swoim manifest.xml.

 3
Author: Amir Hadifar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:59

W urządzeniach z Androidem pre Lollipop można to zrobić z SystemBarTintManager Jeśli używasz android studio wystarczy dodać Systembartint lib w pliku gradle.

dependencies {
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
    ...
}

Następnie w swojej aktywności

// create manager instance after the content view is set
SystemBarTintManager mTintManager = new SystemBarTintManager(this);
// enable status bar tint
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setTintColor(getResources().getColor(R.color.blue));
 2
Author: Muhammad Aamir Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-28 01:03:25

Dodaj tę linię w stylu v21, jeśli używasz dwóch stylów.

  <item name="android:statusBarColor">#43434f</item>
 2
Author: Amit Walke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-02 06:43:28