webentwicklung-frage-antwort-db.com.de

so legen Sie den Hintergrund der Statusleiste als Verlaufsfarbe oder als Zeichen in Android fest

Ich möchte den Hintergrund der Statusleiste als Verlaufsthema festlegen. Die Farbe der Statusleiste und der Aktionsleiste sollte mit demselben Verlauf darstellbar sein. Gemäß Dokumentation können wir die Farbe in API-Ebene 21 und höher mithilfe von auf die Statusleiste festlegen

<item name="Android:statusBarColor">@color/colorPrimary</item>

Aber ich suche so etwas wie

<item name="Android:statusBarDrawable">@drawable/myDrawable</item>

Ich habe Beispiel gesehen, die verwenden

 <item name="Android:windowTranslucentStatus">false</item>
   <item name="Android:windowTranslucentNavigation">false</item>

aber in diesem Fall überlappen sich Statusleiste und Aktionsleiste (verwenden Sie fitSystemWindow = true, aber immer noch nicht gelöst). Versuchen Sie es auch mit https://github.com/jgilfelt/SystemBarTint dieser Bibliothek, aber immer noch kein Glück

Vielen Dank im Voraus!

9
sushant gosavi

 enter image description here Für jemanden, der den Hintergrund der Statusleiste als Farbverlauf festlegen möchte, können Sie folgende Methode in Ihrer Aktivität vor setContentView () verwenden. 

 @TargetApi(Build.VERSION_CODES.Lollipop)
    public static void setStatusBarGradiant(Activity activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
            Window window = activity.getWindow();
            Drawable background = activity.getResources().getDrawable(R.drawable.gradient_theme);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(activity.getResources().getColor(Android.R.color.transparent));
            window.setNavigationBarColor(activity.getResources().getColor(Android.R.color.transparent));
            window.setBackgroundDrawable(background);
        }
    } 

Vielen Dank für Ihre Hilfe

EDIT

Wenn der obige Code nicht funktioniert, versuchen Sie, dies in Ihrem styles.xml hinzuzufügen:

<style name="AppTheme.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
43
sushant gosavi

Bitte schauen Sie sich das an:

Linkbeschreibung hier eingeben

Verwenden Sie eine benutzerdefinierte util-Klasse, um dieses Problem zu beheben

enter image description here

3
Faisal Russel

die Antwort von @sushant gosavi ist richtig, funktioniert jedoch nicht mit DrawerLayout, es sei denn, Sie führen Folgendes in DrawerLayout aus. 

<Android.support.v4.widget.DrawerLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/drawer_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="false"
tools:openDrawer="start">

<include
    layout="@layout/app_bar_navigation"
    Android:fitsSystemWindows="true"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" />

<Android.support.design.widget.NavigationView
    Android:id="@+id/nav_view"
    Android:layout_width="wrap_content"
    Android:layout_height="match_parent"
    Android:layout_gravity="start"
    Android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_navigation"
    app:menu="@menu/activity_navigation_drawer" />

Sie müssen in DrawerLayout den Wert Android:fitsSystemWindows="false" ändern und in den untergeordneten Elementen auf true setzen

1
Saul_programa

eine Erweiterung der Antwort von sushant seit getColor ist veraltet und in kotliner Sprache.

@RequiresApi(Build.VERSION_CODES.Lollipop)
fun backGroundColor() {
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
    window.statusBarColor = ContextCompat.getColor(this, Android.R.color.transparent)
    window.navigationBarColor = ContextCompat.getColor(this, Android.R.color.transparent)
    window.setBackgroundDrawableResource(R.drawable.ic_drawable_vertical_background)
}

Die Idee ist, eine transparente Statusleiste zu erstellen und einen Hintergrund für das gesamte Fenster zu setzen, der auch die Statusleiste im selben Hintergrund abdeckt.

1
vikas kumar

Schritt1: Erstellen Sie eine Statusleisten-Klasse wie unten

public class StatusBarView extends View
{
    private int mStatusBarHeight;

    public StatusBarView(Context context)
    {
        this(context, null);

    }

    public StatusBarView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop){
            setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        }
    }

    @Override
    public WindowInsets onApplyWindowInsets(WindowInsets insets)
    {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop){
            mStatusBarHeight = insets.getSystemWindowInsetTop();
            return insets.consumeSystemWindowInsets();
        }
        return insets;
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),mStatusBarHeight);
    }
}

Schritt2: Erstellen Sie einen gezeichneten Farbverlauf wie unten

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <gradient
        Android:type="linear"
        Android:angle="135"
        Android:endColor="#F34D80"

        Android:startColor="#FF5858"/><!--Android:centerColor="#C12389"-->
</shape>

Schritt3: Erstellen Sie ein Layout wie unten

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="wrap_content"
    Android:orientation="vertical">

    <YOURPACKAGENAME.StatusBarView
        Android:id="@+id/status_bar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="@drawable/toolbar_bg_gradient"/>

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:background="@drawable/toolbar_bg_gradient"
        Android:elevation="0dp"
        Android:minHeight="?attr/actionBarSize"
        app:contentInsetStartWithNavigation="0dp"
        app:popupTheme="@style/AppTheme.PopupOverlay"
        app:subtitleTextColor="@Android:color/white"
        app:theme="@style/AppTheme.AppBarOverlay"
        app:titleTextColor="@Android:color/white" />
</LinearLayout>

Schritt4: Erstellen Sie einen Stil für die Aktivität

<style name="AppTheme.NoActionBarMain" parent="Base.Theme.AppCompat.Light">
        <item name="windowActionBar">false</item>
        <item name="Android:windowDisablePreview">true</item>
        <item name="windowNoTitle">true</item>
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="Android:windowContentOverlay">@null</item>
        <item name="Android:windowEnableSplitTouch">false</item>
        <item name="Android:splitMotionEvents">false</item>
        <item name="Android:windowDrawsSystemBarBackgrounds" tools:targetApi="Lollipop">true</item>
        <item name="Android:statusBarColor" tools:targetApi="Lollipop">@Android:color/transparent</item>
        <item name="Android:colorForeground">@color/foreground_material_light</item>
        <item name="windowActionModeOverlay">true</item>
        <item name="actionModeStyle">@style/LywActionMode</item>
    </style>

<style name="LywActionMode" parent="Base.Widget.AppCompat.ActionMode">
        <item name="background">@color/colorPrimary</item>
        <item name="backgroundSplit">@color/colorPrimary</item>
    </style>
1
Vivek Barai

Wie Sie das ohne Java-Code tun,

Verlaufsdatei drawable/bg_toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <gradient
        Android:type="linear"
        Android:angle="0"
        Android:startColor="#11998e"
        Android:endColor="#38ef7d" />
</shape>

füge dies in deinen values/style.xml ein

<item name="Android:windowBackground">@drawable/bg_toolbar</item>
<item name="toolbarStyle">@style/Widget.Toolbar</item>
<item name="Android:statusBarColor">#00000000</item>

eine neue Datei für die Symbolleiste erstellen Farbverlauf values/toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
        <item name="contentInsetStart">0dp</item>
        <item name="Android:background">@drawable/bg_toolbar</item>
    </style>
</resources> 

Bearbeiten: Fügen Sie background Android:background="#ffffff" in Ihre Aktivitätslayoutdatei ein.

0
Kartik Garasia

Ich habe es so gelöst

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowBackground">@drawable/backfull</item>
    <item name="Android:windowActionBar">false</item>

    <item name="Android:windowActionModeOverlay">true</item>
    <item name="windowActionModeOverlay">true</item>

</style>

<style name="AppTheme2" parent="AppTheme.Base">
    <item name="colorPrimary">@drawable/backfull</item>
    <item name="colorPrimaryDark">@Android:color/white</item>>
    <item name="colorAccent">@Android:color/black</item>
    <item name="colorButtonNormal">@Android:color/white</item>
</style>

<style name="ToolbarTheme" parent="Widget.AppCompat.Toolbar">
    <item name="Android:background">@drawable/backfull</item>
    <item name="background">@Android:color/black</item>
    <item name="titleTextAppearance">@style/ToolbarTitleTheme</item>
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

<style name="ToolbarTitleTheme">
    <item name="Android:textColor">@Android:color/holo_red_dark</item>
    <item name="Android:textStyle">bold</item>
</style>
0
Noaman Akram

die Antwort von Sushant Goswami funktioniert tatsächlich einwandfrei, nachdem ich eines Tages festgestellt hatte, dass die Farbe der Statusleiste und die Startfarbe des Verlaufs in meinem Fall identisch waren, nachdem ich die Verlaufsfarbe in eine andere Farbe als die Standardfarbe der Statusleiste geändert hatte Gut

0
harpreet makkar

Das Hinzufügen der folgenden zwei Zeilen hat mir geholfen:

window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

Ich habe die Antwort auf diesen Link hier. Verwendet. Wenn Sie die Aktionsleiste anzeigen möchten, füge ich den nächsten Code hinzu. Transparenter Hintergrund

final ActionBar ab = getSupportActionBar();
    if (ab != null) {
        Drawable gradientBG = getResources().getDrawable( R.drawable.bg_transperant);
        ab.setBackgroundDrawable(gradientBG);
    }

und dann in bg_gradient.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
       Android:shape="rectangle">
       <solid Android:color="@Android:color/transparent" />
</shape>
0
Süheyl Kawsara