Hoe verander ik de kleur van de statusbalk in Android?

Allereerst is het geen duplicaat zoals in De achtergrondkleur van de Android-statusbalk wijzigen

Hoe verander ik de kleur van de statusbalk die hetzelfde moet zijn als in de navigatiebalk.

Ik wil dat de kleur van de statusbalk hetzelfde is als de kleur van de navigatiebalk


Antwoord 1, autoriteit 100%

Android 5.0 Lollipop introduceerde het Material Design-thema dat automatisch de statusbalk kleurt op basis van de colorPrimaryDark-waarde van het thema.

Dit wordt ondersteund op apparaat pre-lollipop dankzij de bibliotheekondersteuning-v7-appcompat vanaf versie 21. Blogpost over ondersteuning appcompat v21 van Chris Banes

Lees meer over het materiaalthema op de officiële website voor Android-ontwikkelaars


Antwoord 2, autoriteit 57%

Bijwerken:

Lolly:

public abstract void setStatusBarColor (int color)

Toegevoegd in API-niveau 21

Android Lollipop bracht de mogelijkheid met zich mee om de kleur van de statusbalk in je app te veranderen voor een meer meeslepende gebruikerservaring en in overeenstemming met de Material Design Guidelinesvan Google.

Hier ziet u hoe u de kleur van de statusbalk kunt wijzigen met de nieuwe methode window.setStatusBarColordie is geïntroduceerd in API level 21.

Het wijzigen van de kleur van de statusbalk vereist ook het instellen van twee extra vlaggen op het venster; je moet de vlag FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDStoevoegen en de vlag FLAG_TRANSLUCENT_STATUSwissen.

Werkcode:

import android.view.Window;

Window window = activity.getWindow();
// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// finally change the color
window.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));

Officiële ontwikkelaarsreferentie: setStatusBarColor(int)

Voorbeeld:material-design-everywhere

Chris Banes Blog- appcompat v21: materiaalontwerp voor pre-Lollipop-apparaten!

De transitionNamevoor de weergave-achtergrond is android:status:background.


Antwoord 3, autoriteit 36%

Plaats dit is uw waarden-v21/styles.xml, om dit op Lollipop in te schakelen:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:statusBarColor">@color/color_primary</item>
    </style>
</resources>

Antwoord 4, autoriteit 7%

dit is een heel gemakkelijke manier om dit te doen zonder enige bibliotheek:
als de OS-versie niet wordt ondersteund – onder kitkat – is er dus niets gebeurd.
ik doe deze stappen:

  1. in mijn xml heb ik bovenaan deze weergave toegevoegd:
<View
        android:id="@+id/statusBarBackground"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

Toen heb ik deze methode gemaakt:

public void setStatusBarColor(View statusBar,int color){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
           Window w = getWindow();
           w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
           //status bar height
           int actionBarHeight = getActionBarHeight();
           int statusBarHeight = getStatusBarHeight();
           //action bar height
           statusBar.getLayoutParams().height = actionBarHeight + statusBarHeight;
           statusBar.setBackgroundColor(color);
     }
}

ook heb je die beide methoden nodig om actiebalk & hoogte statusbalk:

public int getActionBarHeight() {
    int actionBarHeight = 0;
    TypedValue tv = new TypedValue();
    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
    {
       actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
    }
    return actionBarHeight;
}
public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

dan is het enige dat je nodig hebt deze regel om de kleur van de statusbalk in te stellen:

setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));

Antwoord 5, autoriteit 7%

Voor Java-ontwikkelaars:

Zoals @Niels al zei, moet je in values-v21/styles.xml plaatsen:

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

Maar voeg tools:targetApi="lollipop"toe als je enkele stijlen.xml wilt, zoals:

<item name="android:statusBarColor" tools:targetApi="lollipop">@color/black</item>

Voor Kotlin-ontwikkelaars:

window.statusBarColor = ContextCompat.getColor(this, R.color.color_name)

Antwoord 6, autoriteit 5%

U kunt deze eenvoudige code gebruiken:

One-liner in Kotlin:

window.statusBarColor = ContextCompat.getColor(this, R.color.colorName)

Origineel antwoord met Java & handmatige versiecontrole:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light, this.getTheme()));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light));
}

Antwoord 7, autoriteit 5%

Als u de kleur voor bovenstaande lolipop wilt wijzigen, voegt u deze toe aan uw styles.xml

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

maar onthoud, als je een lichte kleur voor de statusbalk wilt, voeg deze regel dan ook toe

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

Antwoord 8, autoriteit 4%

Nou, de Izhar-oplossing was OK, maar,
persoonlijk probeer ik code te vermijden die er als volgt uitziet:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//Do what you need for this SDK
};

Ik hou er ook niet van om code te dupliceren. In uw antwoord moet ik een dergelijke regel code toevoegen aan alle activiteiten:

setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));

Dus ik nam de Izhar-oplossing en gebruikte XML om hetzelfde resultaat te krijgen:
Maak een lay-out voor de StatusBar status_bar.xml

<View xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="@dimen/statusBarHeight"
     android:background="@color/primaryColorDark"
     android:elevation="@dimen/statusBarElevation">

Let op de hoogte- en hoogte-kenmerken, deze zullen worden ingesteld in waarden, waarden-V19, waarden-V21 verder naar beneden.

Voeg deze lay-out toe aan uw activiteitenlay-out met behulp van opnemen, main_activity.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/Black" >
<include layout="@layout/status_bar"/>
<include android:id="@+id/app_bar" layout="@layout/app_bar"/>
//The rest of your layout       
</RelativeLayout>

Voor de werkbalk, voegt u TOP-margeattribuut toe:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="@color/primaryColor"
app:theme="@style/MyCustomToolBarTheme"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
android:elevation="@dimen/toolbarElevation"
android:layout_marginTop="@dimen/appBarTopMargin"
android:textDirection="ltr"
android:layoutDirection="ltr">

In uw Apptheme Style-V19.xml en Styles-V21.xml, voeg de WindowTranSlucent aan toe:

Stijlen-V19.XML, V21:

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

En tot slot, op je dimens, dimens-v19, dimens-v21, voeg je de waarden toe voor de Toolbar topMargin en de hoogte van de statusBarHeight:
dimens.xml voor minder dan KitKat:

<resources>
<dimen name="toolbarElevation">4dp</dimen>
<dimen name="appBarTopMargin">0dp</dimen>
<dimen name="statusBarHeight">0dp</dimen>
</resources>

De hoogte van de statusbalk is altijd 24 dp
dimens-v19.xml voor KitKat en hoger:

<resources>
<dimen name="statusBarHeight">24dp</dimen>
<dimen name="appBarTopMargin">24dp</dimen>
</resources>

dimens-v21.xml voor Lolipop, voeg indien nodig de hoogte toe:

<resources>
<dimen name="statusBarElevation">4dp</dimen>
</resources>

Dit is het resultaat voor Jellybean KitKat en Lollipop:


Antwoord 9, autoriteit 3%

Maak gewoon een nieuw thema in res/values/styles.xmlwaar u de “colorPrimaryDark” wijzigt, wat de kleur is van de statusbalk:

<style name="AppTheme.GrayStatusBar" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/colorGray</item>
</style>

en wijzig het activiteitsthema in AndroidManifest.xml Aan de gewenste activiteit, op de volgende activiteit kunt u de kleur weer wijzigen naar de originele door het originele thema te selecteren:

<activity
    android:name=".LoginActivity"
    android:theme="@style/AppTheme.GrayStatusBar" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Dit is hoe uw res / waarden / kleuren.xml eruit moeten zien:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#c6d6f0</color>
    <color name="colorGray">#757575</color>
</resources>

Antwoord 10, Autoriteit 3%

U kunt de statusbalkkleur wijzigen met deze functie. Werkt op Android L betekent API 21 en hoger en heeft een kleurreeks nodig, zoals "#ffffff".

private void changeStatusBarColor(String color){
    if (Build.VERSION.SDK_INT >= 21) {
        Window window = getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.parseColor(color));
    }
}

Antwoord 11, Autoriteit 2%

Ik had deze vereiste: De kleur van de statusbalk programmatisch wijzigen om deze transparant te houden, zodat de navigatielade zichzelf kan tekenen terwijl de transparante statusbalk overlapt.

Ik kan dat niet doen met de API

getWindow().setStatusBarColor(ContextCompat.getColor(activity ,R.color.my_statusbar_color)

Als je hier checkt in stack overflow, zet iedereen voor die regel code de transparantie van de statusbalk op effen met

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

Ik kan de kleur en transparantievan de statusbalk als volgt beheren:

  • Android 4: je kunt niet veel doen, omdat je de kleur van de statusbalk niet kunt beheren vanuit de API … het enige wat je kunt doen is de statusbalk als doorschijnend instellen en een gekleurd element verplaatsen van je gebruikersinterface onder de statusbalk. Om dit te doen moet je spelen met

    android:fitsSystemWindows="false"
    

    in uw hoofdlay-out. Hiermee kunt u uw lay-out tekenen onder de statusbalk. Dan moet je met wat opvulling spelen met de bovenkant van je hoofdlay-out.

  • Android 5 en hoger: je moet een stijl definiëren met

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

    hierdoor kan de navigatielade de statusbalk overlappen.

    Om vervolgens de kleur te wijzigen en de statusbalk transparant te houden, moet u de kleur van de statusbalk instellen met

    drawerLayout.setStatusBarBackgroundColor(ContextCompat.getColor(activity, R.color.my_statusbar_color))
    

    waar drawerLayout als volgt is gedefinieerd

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
    

Antwoord 12, autoriteit 2%

Als u de kleur van de statusbalk wilt wijzigen, gaat u naar
res/values-v21/styles.xmlen kleur van statusbalk

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:statusBarColor">#0000FF</item>
    </style>
</resources>

Antwoord 13

Als u de kleur van de statusbalk programmatisch wilt wijzigen (en op voorwaarde dat het apparaat Android 5.0 heeft).
Dit is een eenvoudige manier om statusBarColorte wijzigen van elke Activiteit
en zeer eenvoudige methoden wanneer verschillende fragmenteneen verschillende statusbalkkleur hebben.

/**
 * @param colorId id of color
 * @param isStatusBarFontDark Light or Dark color
 */
fun updateStatusBarColor(@ColorRes colorId: Int, isStatusBarFontDark: Boolean = true) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val window = window
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        window.statusBarColor = ContextCompat.getColor(this, colorId)
        setSystemBarTheme(isStatusBarFontDark)
    }
}
/** Changes the System Bar Theme.  */
@RequiresApi(api = Build.VERSION_CODES.M)
private fun setSystemBarTheme(isStatusBarFontDark: Boolean) {
    // Fetch the current flags.
    val lFlags = window.decorView.systemUiVisibility
    // Update the SystemUiVisibility depending on whether we want a Light or Dark theme.
    window.decorView.systemUiVisibility = if (isStatusBarFontDark) lFlags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() else lFlags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}

Antwoord 14

Bewerk de colorPrimary in de colors.xml in Values naar de kleur die u op de statusbalk wilt hebben. Bijvoorbeeld:

  <resources>
<color name="colorPrimary">#800000</color> // changes the status bar color to Burgundy
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="red">#FF0000</color>
<color name="white">#FFFFFF</color>
<color name="cream">#fffdd0</color>
<color name="burgundy">#800000</color>


Antwoord 15

Als je met Android 4.4 en hoger wilt werken, probeer dit dan eens. Ik verwijs naar het antwoord van Harpreet en deze link. Android en de transparante statusbalk

Roep eerst de methode setStatusBarColored aan in de methode onCreate van Activity (ik plaats het in een util-klasse). Ik gebruik hier een afbeelding, je kunt deze wijzigen om een kleur te gebruiken.

public static void setStatusBarColored(Activity context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
    {
        Window w = context.getWindow();
        w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        int statusBarHeight = getStatusBarHeight(context);
        View view = new View(context);
        view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        view.getLayoutParams().height = statusBarHeight;
        ((ViewGroup) w.getDecorView()).addView(view);
        view.setBackground(context.getResources().getDrawable(R.drawable.navibg));
    }
}
public static int getStatusBarHeight(Activity context) {
    int result = 0;
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = context.getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

Vroeger:

Na:

De kleur van de statusbalk is gewijzigd, maar de navigatiebalk is afgesneden, dus we moeten de marge of offset van de navigatiebalk instellen in de onCreate-methode.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, (int)(this.getResources().getDimension(R.dimen.navibar_height)));
        layoutParams.setMargins(0, Utils.getStatusBarHeight(this), 0, 0);
        this.findViewById(R.id.linear_navi).setLayoutParams(layoutParams);
    }

De statusbalk ziet er dan zo uit.


Antwoord 16

Oplossing is heel eenvoudig, zet de volgende regels in je style.xml

Voor donkere modus:

<item name="android:windowLightStatusBar">false</item>
<item name="android:statusBarColor">@color/black</item>

Antwoord 17

Voeg deze regels gewoon toe aan uw bestand styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- This is used for statusbar color. -->
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <!-- This is used for statusbar content color. If statusbarColor is light, use "true" otherwise use "false"-->
    <item name="android:windowLightStatusBar">false</item>
</style>

Antwoord 18

Dit is wat voor mij werkte in KitKat en met goede resultaten.

public static void setTaskBarColored(Activity context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
        {
            Window w = context.getWindow();
            w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //status bar height
            int statusBarHeight = Utilities.getStatusBarHeight(context);
            View view = new View(context);
            view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            view.getLayoutParams().height = statusBarHeight;
            ((ViewGroup) w.getDecorView()).addView(view);
            view.setBackgroundColor(context.getResources().getColor(R.color.colorPrimaryTaskBar));
        }
    }

Antwoord 19

verander de colorPrimaryDarkin de gewenste kleur in het bestand res/values/styles.xml

   <resources>
        <color name="colorPrimary">#800000</color>
        <color name="colorPrimaryDark">#303F9F</color> //This Line
        <color name="colorAccent">#FF4081</color>
        <color name="red">#FF0000</color>
        <color name="white">#FFFFFF</color>
       <color name="cream">#fffdd0</color>
       <color name="burgundy">#800000</color>
    </resources>

Antwoord 20

Nog een oplossing:

final View decorView = w.getDecorView();
View view = new View(BaseControllerActivity.this);
final int statusBarHeight = UiUtil.getStatusBarHeight(ContextHolder.get());
view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight));
view.setBackgroundColor(colorValue);
((ViewGroup)decorView).addView(view);

Antwoord 21

ik heb deze code gebruikt om de statusbalk in transparant te veranderen

   activity?.window?.setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )

gebruik deze code om het in stijl in kleur te veranderen
ik gebruikte in fragment in onDetach()

activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)

Antwoord 22

Als je een aangepast tekenbaar bestand wilt instellen, gebruik dan dit codefragment

fun setCustomStatusBar(){
    if (Build.VERSION.SDK_INT >= 21) {
        val decor = window.decorView
        decor.viewTreeObserver.addOnPreDrawListener(object :
            ViewTreeObserver.OnPreDrawListener {
            override fun onPreDraw(): Boolean {
                decor.viewTreeObserver.removeOnPreDrawListener(this)
                val statusBar = decor.findViewById<View> 
                  (android.R.id.statusBarBackground)
                statusBar.setBackgroundResource(R.drawable.bg_statusbar)
                return true
            }
        })
    }
}

Antwoord 23

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
    <!-- Primary brand color. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
    <item name="colorOnPrimary">@color/white</item>
    <!-- Secondary brand color. -->
    <item name="colorOnSecondary">@color/black</item>
    <!-- Status bar color. -->
    <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
    <!-- Customize your theme here. -->
</style>

Notice:stel colorPrimaryVariant

in

Other episodes