web-dev-qa-db-ja.com

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

マシュマロで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>

 enter image description here 

80
pt2121

アクティビティレイアウトを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
pt2121

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

したがって、削除する必要があることがわかりました

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

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

144
Phoenix Wang

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

私はまったく同じ問題を抱えていました。どういうわけか、いくつかのアクティビティは正常でしたが、作成した新しいアクティビティは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"がなければ、この解決策はうまくいかないことに注意してください。

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

93
Mauro Banze
 <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ではなく、あなたの期待する色でなければなりません

12
Shrini Jaiswal

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

setTheme(R.style.AppTheme);

それはあなたのアクティビティのsuper.OnCreate()の前に行かなければなりません。

9
James Britton

このアイテムを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>
8
Rami

これを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);
7
Michele Lacorte

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

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

に:

 <item name="windowDrawsSystemBarBackgrounds">false</item>
6
Degomos

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

これは私のために動作します。

4
Shendre Kiran
<item name="Android:statusBarColor">@Android:color/transparent</item>

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

この回答へのリンク

4
Phares

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

<item name="Android:windowLightStatusBar" tools:ignore="NewApi">true</item>
3
Andres Paez

より良いアプローチ

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>
3
Nilesh Mahant

私にとっては、以下を行うことで機能しました:

  1. テーマを設定します.NoActionBar
  2. Android.support.design.widget.AppBarLayoutでツールバーをラップします
  3. Android.support.design.widget.CoordinatorLayoutを親レイアウトにします。

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

2
priyankvex

遅れるかどうかはわかりませんが、誰かの助けになることを願っています。 *レイアウトに合う透明な背景を持つ偽のビューを作成し、ルートレイアウト要素として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
vahidlazio

スタイル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>
1
Ankit Aman

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>

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

1
sahu

[Output]

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

Styles.xmlを開く(v21)

以下のいずれかを使用

  1. Android:windowDrawsSystemBarBackgroundsプロパティでtruefalseに変更します。
  2. Android:statusBarColorプロパティで@ Android:color/transparent@ color/colorPrimaryDarkに変更します。
  3. Android:statusBarColorプロパティ行を削除します。
0
Ketan Ramani

スタイル-21に実装されている配色を確認してください

0
Shivegeeky

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

私の推測では、これはAndroid:windowBackgroundが原因です。 @color/background_material_lightは白への参照ですか?

0
hanspeide

このツールバーが白に変わることを確認してください-画面外にスクロールされた後に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ツールバーは、入力時にフルハイトまで見えません入力されていない場合)

0
clickdroid