マシュマロで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>
アクティビティレイアウトを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 を試してください。これらのツールが役立つ場合があります。
私はこのリンクで答えを見つけました: ステータスバーの色がルート要素としての相対レイアウトで変化しない
したがって、削除する必要があることがわかりました
<item name="Android:statusBarColor">@Android:color/transparent</item>
styles.xml(v21)で。そして、それは私にとってはうまく機能します。
(パーティーに少し遅れましたが、誰かを助けるかもしれません)
私はまったく同じ問題を抱えていました。どういうわけか、いくつかのアクティビティは正常でしたが、作成した新しいアクティビティは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"
がなければ、この解決策はうまくいかないことに注意してください。
ロリポップとマシュマロでテスト済み
<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ではなく、あなたの期待する色でなければなりません
上記のすべての試みに失敗した後、テーマを明示的に設定すると問題が解決することがわかりました。
setTheme(R.style.AppTheme);
それはあなたのアクティビティのsuper.OnCreate()の前に行かなければなりません。
このアイテムを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>
これを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);
私は同じ問題に直面しました。私がやったことは、「v21/styles.xml」ファイルで値をtrueに変更しました。
<item name="windowDrawsSystemBarBackgrounds">true</item>
に:
<item name="windowDrawsSystemBarBackgrounds">false</item>
スタイルv21 @Android:color/transparentから次のタグを削除するだけです
これは私のために動作します。
<item name="Android:statusBarColor">@Android:color/transparent</item>
Values/styles/styles.xml(v21)にそのコード行が表示されます。削除すると問題が解決します
コンテンツを表示するには、このプロパティをスタイルに追加する必要があります
<item name="Android:windowLightStatusBar" tools:ignore="NewApi">true</item>
より良いアプローチ
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>
私にとっては、以下を行うことで機能しました:
.NoActionBar
Android.support.design.widget.AppBarLayout
でツールバーをラップしますAndroid.support.design.widget.CoordinatorLayout
を親レイアウトにします。基本的に、colorPrimaryDark
にステータスバーを描画するのは3番目のステップです。そうでない場合は、NoActionBar
テーマを使用している場合は描画されません。 2番目のステップでは、ツールバーが オーバーレイ。
遅れるかどうかはわかりませんが、誰かの助けになることを願っています。 *レイアウトに合う透明な背景を持つ偽のビューを作成し、ルートレイアウト要素として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
スタイル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>
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>
うまく動作します。これが役に立てば幸いです。ありがとう。
[
プロジェクトパネルからres-> values-> stylesディレクトリを展開します。
Styles.xmlを開く(v21)
以下のいずれかを使用
Android:windowDrawsSystemBarBackgrounds
プロパティでtrueをfalseに変更します。Android:statusBarColor
プロパティで@ Android:color/transparentを@ color/colorPrimaryDarkに変更します。Android:statusBarColor
プロパティ行を削除します。スタイル-21に実装されている配色を確認してください
RelativeLayout/CoordinatorLayoutを使用している場合、これは私のために働いた解決策です:
使用する必要があります
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"
>
...
良いコーディング!
私の推測では、これはAndroid:windowBackground
が原因です。 @color/background_material_light
は白への参照ですか?
このツールバーが白に変わることを確認してください-画面外にスクロールされた後に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ツールバーは、入力時にフルハイトまで見えません入力されていない場合)