ステータスバーが白くなり、その背後にあるコンテンツが表示されない


96

私はマシュマロでAppCompatを試しています。透明なステータスバーが必要ですが、白くなります。私はいくつかの解決策を試しましたが、うまくいきませんでした(透明なステータスバーがwindowTranslucentNavigation = "false"機能しないLollipop:statusBarの後ろに色を透明に設定して描画します)。ここに関連するコードがあります。

私のstyles.xml

<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>

アクティビティ

<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>

断片

<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>

ここに画像の説明を入力してください


この問題を解決できますか?同じ問題が発生しています。私の活動の1つに白いステータスバーがある
kirtan403

1
@ kirtan403アクティビティレイアウトをFrameLayoutからRelativeLayoutに変更して問題を修正しました。私の答えを見てください。
pt2121 2015年

私は相対的ですが、まだ白いステータスバーしか表示されません。ここに質問を投稿しました:stackoverflow.com/q/33890066/1820644
kirtan403

1日苦労した後、私は自分に役立つ解決策を見つけました。答えはここにあります:stackoverflow.com/a/33892569/1820644
kirtan403

私はandroid:windowTranslucentStatusのステータスをfalseに変更し、その動作
Kiran Benny Joseph

回答:


167

私はこのリンクで答えを見つけました:ルート要素としての相対レイアウトでステータスバーの色が変化しない

だから私たちは削除する必要があることが判明

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

styles.xml(v21)で。そして、それは私にとってはうまくいきます。


はい、これが解決策です。android:fitsSystemWindowsは、タブバーをスクロール可能にすると問題が発生するためです。同じ答えが見つかりましたが、以前に投稿しました。また、これはデフォルトで上書きされると思います。
jobbert 2016

これは、承認済みのソリューションとしてマークする必要があります。この問題は私のアプリ全体に忍び寄っていました。このソリューションは、その単一の行をコメント化するだけでどこでも修正されました。そんな悩みを解消してくれました!
BMB 2017

私はCoordinatorLayoutを使用しているため、ルートとしてのCoordinatorLayoutに対する他の回答は機能しません(提案されているようにfitsSystemWindows = trueを使用しても機能しませんでした)。この答えは私にとってはうまくいきます。
ブルース

ステータスバーの色を透明にする必要がある場合はどうなりますか?
-nullmn

1
@nullmn次に、アクティビティの背景を別のものに変更する必要があります。
フェニックス王

96

(パーティーには少し遅れますが、誰かを助けるかもしれません)

私はまったく同じ問題を抱えていました。どういうわけか、いくつかのアクティビティは正常でしたが、私が作成した新しいアクティビティはcolorPrimaryDark値ではなく白いステータスバーを表示していました。

いくつかのヒントを試した後、私はすべてCoordinatorLayoutがレイアウトのルートとして使用する通常の作業アクティビティに気づきましたが、他のものについては、が提供する機能(アニメーションなど)を必要としないため、通常のレイアウトに置き換えましたCoordinatorLayout

したがって、解決策はCoordinatorLayoutルートレイアウトを作成し、その中に以前のレイアウトルートを追加することです。次に例を示します。

<?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>

android:fitsSystemWindows="true"この解決策がなければ私にはうまくいかないことに注意してください。

ロリポップとマシュマロでテスト済み


3
解決策は私にとってもうまくいきました。しかし、なぜそれが起こるのですか?ルートがDrawerLayoutまたはCoordinatorLayoutの場合、適切なステータスバーの色が表示される
user3316561

3
追加するとき、これが唯一の私のために働いたandroid:fitsSystemWindows="true"CoordinatorLayoutAndroidの8中
フランコ

2
@Francoこれがソリューションの最も重要な部分だと思います。私CoordinatorLayoutが同じ問題を経験したときに私がこれを修正した特定のプロパティがあったのでこれを言いましたandroid:fitsSystemWindows="true"
Wilhelm

android:fitsSystemWindows="true"私のために動作しませんでした。私の問題を解決したのはAppTheme.NoActionBar、のアクティビティにないテーマを使用することCoordinatorLayoutです。それがなぜそれを直したのか私にはわかりません。
bmdelacruz

CoordinatorLayoutまたはandroid:fitsSystemWindows="true"どちらも私のために働いていません。
Alif Hasnain

17
 <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

これを置き換えるだけで、statusBarColorは予想される色であり、TRANSPARENTではありません。


17

コンテンツを表示するには、スタイルにこのプロパティを追加する必要があります

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

これでうまくいきました。これは受け入れられるべき答えです。
abdul rehman

11

これをstyle.xmlに追加します

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

そしてこれはあなたのonCreate();

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

1
おかげで、これは動作しません。ステータスバーは同じように見えます。
pt2121 2015

この問題を解決してください...同じ問題がここにあります...これまでの解決策はどれも機能しません
Saeed Jassani 2015年

@SaeedJassani私のために働く解決策を見つけました。stackoverflow.com/a/33892569/1820644:あなたは同じ問題を抱えている場合は、私の質問と回答を見てい
kirtan403

9

上記のすべてに失敗した後、テーマを明示的に設定すると問題が解決することがわかりました。

setTheme(R.style.AppTheme);

それはあなたの活動のsuper.OnCreate()の前に行く必要があります。


1
これでマシュマロの
誤動作が

愛してるよ、魅力のように働いたけど、まだ理由はわからない:@
Adeel Ahmad '30

super.OnCreate()がキーになる前
Karthik Rk

9

このアイテムをv21 \ 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:windowTranslucentStatus">true</item>
</style>


1
false最後の2つの項目の値を使用すると、うまくいきました。奇妙ですが、感謝します。
JCarlosR 2018年

最後の2行でのみ機能しますが、コンテンツがステータスバーの後ろに表示されます。パディング/マージンまたはfitsSystemWindowsは役に立ちません。nougatを実行するOP 5でテスト済み
アントンマコフ

9

私は同じ問題に直面しました。私がしたことは、「v21 / styles.xml」ファイルで値trueを変更したことです。

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

に:

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

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

そのコード行がvalues / styles / styles.xml(v21)に表示されます。それを削除すると、問題が解決します

この回答へのリンク


5

ActivityLayoutをFrameLayoutからRelativeLayoutに変更して問題を修正しました。助けてくれた皆さんありがとう!

<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>

hierarchy-viewerまたはViewInspectorを試してください。これらのツールが役立つ場合があります。


5

スタイルv21 @android:color / transparentから次のタグを削除するだけです

これでうまくいきます。


@android:color / transparentは「タグ」ではありません。これはスタイル属性の値である可能性がありますが、「タグ」ではありません。OPがこの値を複数回定義している場合はどうなりますか?彼はどちらを削除する必要がありますか?あなたの答えはあまりにも一般的です。
保護対象

ええ、私にとってもそうでした。ありがとう、シェンドレ!:)そしてあなたのコメントのために、@ protectedmember-OSには性別がありません。
zeroDivider

3

より良いアプローチ

NoActionBarテーマが存在するstyle.xmlファイルを確認します。その親がTheme.AppCompat.NoActionBarであることを確認し、配色を追加してカスタマイズします。最後に、必要に応じてマニフェストにテーマを設定します。

以下は、私のstyles.xmlファイル(ActionBar + NoActionBar)のサンプルです。

<!-- 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

私にとっては、次のようにしてうまくいきました:

  1. テーマを設定する .NoActionBar
  2. ツールバーを折り返す android.support.design.widget.AppBarLayout
  3. 作るandroid.support.design.widget.CoordinatorLayout親レイアウトとして。

基本的には、ステータスバーを描画する3番目のステップです。colorPrimaryDarkそれ以外の場合は、NoActionBarテーマを使用している場合は描画されません。2番目のステップでは、ツールバーをオーバーレイします。


2

スタイルv23

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

スタイルv21の場合

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

2

[出力]

プロジェクトパネルからres-> values-> stylesディレクトリを展開します。

styles.xml(v21)を開く

以下のいずれかを使用

  1. プロパティのtruefalseに変更しandroid:windowDrawsSystemBarBackgroundsます。
  2. 変更は@android:カラー/透明@カラー/ colorPrimaryDarkandroid:statusBarColorプロパティ。
  3. android:statusBarColorプロパティラインを削除します。

2

v21 / styles.xmlに

<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>

次に、 行の下を削除またはコメントするか、ステータスバーの色を変更します。

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

正常に動作しています。これがお役に立てば幸いです。ありがとう。


2

私はこれに対する解決策を見つけました-

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

これをスタイルに追加すると、API 21以降で機能します。


1

それが遅いかどうかはわかりませんが、誰かのお役に立てば幸いです。*レイアウトに合う透明な背景を持つ偽のビューを作成し、ルートレイアウト要素としてcoordinatorlayoutを作成します。

<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

これは私に仕事があります

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
こんにちは、StackOverflowへようこそ!回答を編集して、この回答が機能する理由を詳しく説明してもらえますか?コードの短い説明は非常に役立ちます。
Gigazelle

0

これはあなたが原因だと思いますandroid:windowBackground。ある@color/background_material_light白への参照?


いいえ。それは間違いなく白ではありませんが、とにかくありがとう!(その上に白いアイコンが表示されます。)
pt2121 '

あなたの質問を読み間違えました。で置き換え<item name="android:statusBarColor">@android:color/transparent</item>てみてください<item name="android:statusBarColor">@null</item>
Hanspeide、2015年

私があなたを正しく理解していることを確認するためだけに、ステータスバーの後ろに画像を表示しますか?
ハンスペイド2015年

0

このツールバーが白くなることを確認-画面外にスクロールした後、AppBarが描画されない

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

ライブラリ23.0.0を使用しています。そしてバグはまだ発生します。

これの回避策は、ほとんどスペースを取らず、非表示にできるビューを追加することです。以下の構造を参照してください。

<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のこの質問もこのバグを参照しています: CoordinatorLayout Toolbarは、Enterで全高まで表示され ませんAppBarLayout-ビューに入ると、レイアウトが表示されない場合があります(入力されていなくても)


それは同じバグではありません。私の場合、画面外にスクロールされた後ではなく、アクティビティが表示された直後は白です。とにかくありがとう
pt2121 2015年

0

RelativeLayout / CoordinatorLayoutを使用している場合、これは私のために働いたソリューションです:

あなたが使用する必要があります

  • CoordinatorLayout
  • AppBarLayout

RelativeLayoutの代わりにCoordinatorLayoutを使用することを忘れないでください(パフォーマンスはより良く、AppBarLayoutで完全に動作します)

これがフラグメントの開始方法です

<?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"
    >
    ...

良いコーディング!


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'アイテムをスタイルに追加する


0

これをstyle.xmlに追加します

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

注:ステータスバーの色分けは、APIレベル21以下ではサポートされていません。


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

以下のjavaファイルにこの2行を追加します


1
Stack Overflowへようこそ。あなたのコードがどのように機能し、それがOPの質問を解決するのにどのように役立つかについて詳しく説明していただけませんか?あなたの答えを改善するための良い答えを書く方法を参照してください
トムM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.