Durum çubuğu beyaza dönüyor ve arkasındaki içeriği göstermiyor


98

Marshmallow'da AppCompat'ı deniyorum. Ve şeffaf bir durum çubuğuna sahip olmak istiyorum, ancak beyaza dönüyor. Birkaç çözüm denedim ama benim için işe yaramadı ( Şeffaf durum çubuğu windowTranslucentNavigation = "false" , Lollipop: rengi şeffaf olarak ayarlanmış durum çubuğunun arkasında çizin ). İşte ilgili kod.

Styles.xml'im

<style name="Bacon" parent="Theme.Bacon"/>

<style name="Theme.Bacon" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/theme_primary</item>
    <item name="colorPrimaryDark">@color/theme_primary_dark</item>
    <item name="colorAccent">@color/theme_accent</item>
    <item name="windowActionBar">false</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@color/background_material_light</item>  
</style>

<style name="Theme.Bacon.Detail" parent="Bacon"/>

v21

<style name="Bacon" parent="Theme.Bacon">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>

<style name="Theme.Bacon.Detail" parent="Bacon">
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

Aktivite

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true" />

</FrameLayout>

Fragman

<android.support.design.widget.CoordinatorLayout 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="match_parent"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="192dp"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginBottom="32dp"
        app:expandedTitleMarginEnd="64dp"
        app:expandedTitleMarginStart="48dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:statusBarScrim="@color/black_trans80">

        <ImageView
            android:id="@+id/photo"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:contentDescription="@string/photo"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            app:layout_collapseMode="parallax" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/anim_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

görüntü açıklamasını buraya girin


Bu sorunu çözebilir misin? Ben de aynı sorunu yaşıyorum. Beyaz durum çubuğuna sahip etkinliklerimden birinde
kirtan403

1
@ kirtan403 Etkinlik düzenimi FrameLayout'tan RelativeLayout'a değiştirerek sorunumu çözdüm. Lütfen cevabıma bakın.
pt2121

Benimki Göreli, ancak beyaz durum çubuğunu almaya devam ediyor. Buraya bir soru gönderdim: stackoverflow.com/q/33890066/1820644
kirtan403

Bir gün uğraştıktan sonra benim için işe yarayan çözümü buldum. İşte cevap: stackoverflow.com/a/33892569/1820644
kirtan403

Android: windowTranslucentStatus durumunu yanlış olarak değiştirdim ve çalışıyor
Kiran Benny Joseph

Yanıtlar:


168

Cevabı şu bağlantıda buldum: Durum Çubuğu Rengi, Kök öğe olarak Göreceli Düzen ile değişmiyor

Görünüşe göre kaldırmamız gerekiyor

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

styles.xml (v21) içinde. Ve benim için gayet iyi çalışıyor.


Evet, çözüm bu. Çünkü android: fitsSystemWindows, sekme çubuğunu kaydırılabilir hale getirirken sorunlara neden olacaktır. Aynı cevabı buldum ama daha önce gönderdin. Ayrıca sanırım bunun varsayılan olarak üzerine yazıldığını da belirt.
jobbert

Bu, kabul edilen çözüm olarak işaretlenmelidir. Bu sorun uygulamamın her yerine yayılıyordu, bu çözüm sadece o tek satırı yorumlayarak onu her yerde düzeltti. Beni böyle bir baş ağrısından kurtardı!
BMB

CoordinatorLayout kullanıyorum, bu yüzden bize CoordinatorLayout'a verilen diğer yanıt, kök benim için çalışmıyor (önerildiği gibi fitsSystemWindows = true kullanmak da işe yaramadı). Bu cevap benim için çalışıyor.
Bruce

Durum çubuğu rengimin şeffaf olmasını istersem ne olur?
nullmn

1
@nullmn sonra Etkinlik arka planınızı başka bir şeye değiştirmeniz gerekir.
Phoenix Wang

96

(Partiye biraz geç ama birine yardımcı olabilir)

Aynı sorunu yaşadım. Her nasılsa, bazı etkinlikler normaldi, yeni oluşturduğum etkinlikler colorPrimaryDarkdeğer yerine beyaz durum çubuğu gösteriyordu .

Birkaç ipucu denedikten sonra, normal çalışma etkinliklerinin hepsinin CoordinatorLayoutdüzenin kökü olarak kullanıldığını fark ettim , diğerleri için ise bunu normal düzenlerle değiştirdim çünkü tarafından sağlanan özelliklere (animasyon vb.) İhtiyacım yoktu CoordinatorLayout.

Yani çözüm, CoordinatorLayoutkök düzenini yapmak ve ardından bunun içine eski düzen kökünüzü eklemektir. İşte bir örnek:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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="match_parent"
  android:fitsSystemWindows="true">

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <!-- your activity content here-->


  </LinearLayout>
</android.support.design.widget.CoordinatorLayout>

LÜTFEN UNUTMAYIN, android:fitsSystemWindows="true"bu çözüm olmadan benim için işe yaramaz.

Lollipop ve Marshmallow'da test edildi


3
Çözüm benim için de çalıştı. Ama .. neden oluyor? Kök, DrawerLayout veya CoordinatorLayout olduğunda uygun StatusBar rengi görüntülenir
user3316561

3
Eklerken Bu yalnızca benim için çalıştı android:fitsSystemWindows="true"için CoordinatorLayoutAndroid 8'de
Franco

2
@Franco Bence çözümün en alakalı kısmı bu. Bunu söylüyorum çünkü CoordinatorLayoutaynı sorunu yaşadığımda yaşadım ve bunu benim için android:fitsSystemWindows="true"
Wilhelm

android:fitsSystemWindows="true"Benim için işe yaramadı. Sorunumu çözen şey AppTheme.NoActionBar, etkinlikte olmayan bir temayı CoordinatorLayout. Bunun neden düzeltildiğini bilmiyorum.
bmdelacruz

CoordinatorLayoutya da android:fitsSystemWindows="true"hiçbiri benim için çalışmıyor.
Alif Hasnain

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

Sadece bunu değiştirin, statusBarColor beklediğiniz renk olmalı ve ŞEFFAF olmamalıdır


17

İçeriği görmek için bu mülkü tarzınıza eklemelisiniz

<item name="android:windowLightStatusBar" tools:ignore="NewApi">true</item>

Bu benim için çalıştı. Bu cevap kabul edilmelidir.
abdul rehman

11

Bunu style.xml dosyanıza ekleyin

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

ve bu, onCreate () öğenizde;

 getWindow().getDecorView().setSystemUiVisibility(
       View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

1
Teşekkürler ama bu işe yaramıyor. Durum çubuğu aynı görünüyor.
pt2121

lütfen bu sorun için yardım edin ... burada da aynı sorun .... şimdiye
kadarki

@SaeedJassani Benim için çalışan bir çözüm buldum. Aynı sorunu yaşıyorsanız soruma ve
cevabıma

9

Yukarıdakilerin hepsini başarısız bir şekilde denedikten sonra, temayı açıkça ayarlamanın sorunu çözdüğünü gördüm.

setTheme(R.style.AppTheme);

Bu, aktivitenizdeki super.OnCreate () 'den önce gitmelidir.


1
Bunun Marshmallow'daki hatalı aktiviteyi düzelttiğini onaylayabilirim
dare0021

seni seviyorum adamım, bir cazibe gibi çalıştı, yine de neden olduğunu bilmiyorum: @
Adeel Ahmad

süper önce. OnCreate () anahtar
Karthik Rk

9

Bu öğeyi v21 \ styles.xml dosyanıza koymanız yeterlidir:

doğru

Şöyle görünmeli:

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:windowTranslucentStatus">true</item>
</style>


1
falseSon 2 maddede değerleri kullanarak benim için çalıştı . Tuhaf ama teşekkürler.
JCarlosR

Sadece son iki satır için çalışıyor, ancak içerik durum çubuğunun arkasına gidiyor, padding / margin veya fitsSystemWindows yardımcı olmuyor.
Nuga

9

Ben de aynı sorunla karşılaştım. Yaptığım şey, "v21 / styles.xml" dosyasında true değerini değiştirdi:

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

to:

 <item name="android:windowDrawsSystemBarBackgrounds">false</item>

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

Bu kod satırını values ​​/ styles / styles.xml (v21) içinde göreceksiniz. Onu kaldırın ve bu sorunu çözer

Bu cevaba bağlantı ver


5

Etkinlik düzenimi FrameLayout'tan RelativeLayout'a değiştirerek sorunumu çözdüm. Yardım etmeye çalışan herkese teşekkürler!

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@android:color/transparent">

    <android.support.v4.view.ViewPager
      android:id="@+id/pager"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@color/theme_primary_dark"
      android:fitsSystemWindows="true" />

</RelativeLayout>

Hiyerarşi görüntüleyiciyi veya ViewInspector'ı deneyin . Bu araçlar size yardımcı olabilir.


5

Aşağıdaki etiketi stil v21 @android'den kaldırmanız yeterlidir: color / transparent

Bu benim için çalışıyor.


@android: color / transparent bir "etiket" değildir. Bir stil özniteliğinin değeri olabilir, ancak bir "etiket" değildir. Ya OP bu değeri birden fazla tanımladıysa? Hangisini çıkarmalı? Cevabınız çok genel.
korumalı üye

evet, benim için de böyleydi .. teşekkürler, Shendre! :) ve yorumunuz için, @protectedmember - İşletim Sisteminin cinsiyeti yoktur.
zeroDivider

4

Bunun için bir çözüm buldum -

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowLightStatusBar">true</item>
</style>

bunu tarzınıza ekleyin ve api 21 veya üstü için çalışacaktır.


3

Daha iyi yaklaşım

NoActionBar temanızın bulunduğu style.xml dosyanızı kontrol edin. Ana öğesinin Theme.AppCompat.NoActionBar olduğundan emin olun ve ayrıca renk düzeninizi ekleyerek özelleştirin. Son olarak temalarınızı gerektiği gibi tezahür ettirin.

Aşağıda styles.xml dosyamın (ActionBar + NoActionBar) bir örneği bulunmaktadır.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<!-- No ActionBar application theme. -->
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

2

Benim için aşağıdakileri yaparak işe yaradı:

  1. Temayı ayarlayın .NoActionBar
  2. Araç Çubuğunu sarın android.support.design.widget.AppBarLayout
  3. Make android.support.design.widget.CoordinatorLayoutebeveyn düzeni gibi.

Esasen durum çubuğunu çizen üçüncü adımdır, colorPrimaryDarkaksi takdirde NoActionBartemayı kullanıyorsanız çizilmez . 2. adım, araç çubuğunuza bu üst üste bindirme verecektir .


2

Stiller v23 için

 <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowLightStatusBar">true</item>
    <item name="android:statusBarColor">@android:color/white</item>
</style>

Stiller v21 için

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:statusBarColor">@android:color/white</item>
</style>

2

[Çıktı]

Proje panelinden res -> values ​​-> styles dizinini genişletin.

Styles.xml (v21) dosyasını açın

AŞAĞIDAKİ YOLLARDAN HERHANGİ BİRİNİ KULLANIN

  1. Mülkte true değerini false olarak değiştirin android:windowDrawsSystemBarBackgrounds.
  2. Değişim @android: rengi / şeffaf kadar renkli / colorPrimaryDark @ de android:statusBarColormülk.
  3. Uygun android:statusBarColoripi kaldırın .

2

V21 / styles.xml dosyanız şunu içeriyorsa:

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

Ardından, Kaldır veya açıklama hattı veya durum çubuğunun değişimi renk altında,

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

İyi çalışıyor. Umarım bu yardımcı olur. Teşekkürler.


1

Geç olup olmadığından emin değilim ama umarım birine yardımcı olur. * Düzene uyan şeffaf arka plana sahip sahte bir görünüm oluşturun ve kök düzen öğeniz olarak bir koordinatör düzeni oluşturun.

<View
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:fitsSystemWindows="true" />


<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:scaleType="centerCrop"
    android:src="@drawable/something" />

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   .... YOUR LAYOUT


1

Bunun benim için işi var

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        }

1
Merhaba, StackOverflow'a hoş geldiniz! Bu cevabın neden işe yaradığını detaylandırmak için cevabınızı düzenleyebilir misiniz? Kodunuzun kısa açıklamaları çok işe yarar!
Gigazelle

0

Tahminimce bunun sebebi senin android:windowBackground. Beyaza @color/background_material_lightbir gönderme mi?


Hayır! Kesinlikle beyaz değil ama yine de teşekkürler! (Üzerindeki beyaz simgeleri görebilirsiniz.)
pt2121

Sorunuzu yanlış anladım. Değiştirmeyi deneyin <item name="android:statusBarColor">@android:color/transparent</item>ile <item name="android:statusBarColor">@null</item>.
hanspeide

Sizi doğru anladığımdan emin olmak için, görüntünün durum çubuğunun arkasında gösterilmesini ister misiniz?
hanspeide

0

Bu Araç Çubuğunun beyaza döndüğünü kontrol edin - AppBar, ekrandan kaydırıldıktan sonra çizilmiyor

https://code.google.com/p/android/issues/detail?id=178037#c19

23.0.0 kitaplıkları kullanıyorum. ve hata hala devam ediyor.

Bunun geçici çözümü, neredeyse hiç yer kaplamayan ve görünmez olabilen Görünüm eklemektir. Aşağıdaki yapıya bakın.

<android.support.v4.widget.NestedScrollView
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

</android.support.v4.widget.NestedScrollView>

<android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.Toolbar
        app:layout_scrollFlags="scroll|enterAlways" />

    <android.support.design.widget.TabLayout
        app:layout_scrollFlags="scroll|enterAlways" />

    <View
        android:layout_width="match_parent"
        android:layout_height=".3dp"
        android:visibility="visible"/>

</android.support.design.widget.AppBarLayout>

Stackoverflow.com'daki bu Sorular da bu hataya atıfta bulunur: CoordinatorLayout Araç Çubuğu tam yüksekliğe kadar girişte görünmez AppBarLayout - Düzen bazen görünüme girdiğinde görünmez (girilmese bile)


aynı hata değil. benim durumumda, aktivite ekrandan kaydırıldıktan hemen sonra beyaz. yine de teşekkürler
pt2121

0

RelativeLayout / CoordinatorLayout kullanıyorsanız , bu benim için çalışan çözümdür:

Kullanmak zorundasın

  • Koordinatör
  • AppBarLayout

RelativeLayout yerine CoordinatorLayout kullanmayı unutmayın (performans daha iyidir ve AppBarLayout ile mükemmel şekilde çalışır)

Parçanız böyle başlamalı

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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="match_parent"
android:background="@android:color/background_light"
android:fitsSystemWindows="true"
>

<android.support.design.widget.AppBarLayout
    android:id="@+id/main.appbar"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:fitsSystemWindows="true"
    >
    ...

İyi kodlama!


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

'windowTranslucentStatus' öğesini stillere ekleyin


0

Bunu style.xml dosyanıza ekleyin

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

Not: Durum çubuğu renklendirmesi, API seviyesi 21'in altında desteklenmez.


0

bunu doğru mu istiyorsun?

bunu dene. [değer] - [stil.xml] içinde

<style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
    <item name="android:windowLightStatusBar">true</item>
</style>

biliyorsun, apptheme ile eşleşmiyor - ebeveyn

iyi şanslar


-1
    Window window = this.getWindow();
    window.setStatusBarColor(this.getResources().getColor(R.color.colorPrimaryDark));

Bu 2 satırı aşağıdaki java dosyasına ekleyin


1
Stack Overflow'a hoş geldiniz. Kod parçanızın nasıl çalıştığını ve OP Sorusunu çözmeye nasıl yardımcı olduğunu açıklar mısınız? Lütfen cevabınızı iyileştirmek için nasıl iyi bir cevap yazacağınıza bakın
Tom M
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.