web-dev-qa-db-ja.com

windowTranslucentNavigation = "false"で透明なステータスバーが機能しない

5.0+(API 21+)を実行しているデバイスでは、ナビゲーションバーを不透明にし、ステータスバーを透明にする必要があるActivityを開発しています。私が使用しているスタイルは、私の問題の説明とともに以下にあります。

AppTheme extends Theme.AppCompat.Light.NoActionBar

<item name="Android:statusBarColor">@color/transparent</item>
<item name="Android:windowActionBar">false</item>
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
<item name="Android:statusBarColor">@color/welbe_red_transparent</item>

FullscreenTheme extends AppTheme

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

これにより、アプリは次のようになります

Android:windowTranslucentNavigation="true"

Android:windowTranslucentNavigationスタイルを削除するか、falseFullscreenに設定すると、ナビゲーションバーの問題が修正されます。問題は、ステータスバーが透明のままで、その背後にあるコンテンツを表示するのではなく、完全に白になることです。

Android:windowTranslucentNavigation="false"

レイアウトでfitsSystemWindow="true"を使用しようとしましたが、問題は修正されませんでした。誰がこれが起こっているのか知っていますか?

37
Austyn Mahoney

Android:windowTranslucentNavigationAndroid:statusBarColorはしません。これはSYSTEM_UI_FLAG_LAYOUT_STABLEおよびSYSTEM_UI_FLAG_LAYOUT_FULLSCREENフラグ。

これらは、ステータスバーの背後に描画するために要求する必要があるものです。

onCreateActivityでリクエストします:

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

または、アプリのテーマの背景を設定するだけで、ステータスバーの背後にポップアップすることもできます。

詳細情報 こちら

65
Jeroen Mols

私の知る限り、APIのステータスバーの色を19未満に設定する適切な方法はありません。

API 19以降では、ステータスバーにのみwindowTranslucentNavigationと同様の属性を使用できます。

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

注:

  • 白いステータスバーが表示された理由は、

    <item name="Android:statusBarColor">@color/transparent</item> 
    
  • 特定のメーカーのデバイスで動作する ハック がありますが、私は自分で使用しません。

5
Simas

私はこれに3時間以上苦労しています。 CoordinatorLayoutですべてをラップします。これはfitsSystemWindow = "true"または "false"に注意を払うように見える唯一のものです。

これは私のメインアクティビティフラグメントです

<Android.support.design.widget.CoordinatorLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/content_main"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <include layout="@layout/layout_google_map"/>

    <include layout="@layout/layout_toolbar_transparent"/>

    <include layout="@layout/layout_action_buttons"/>

    <include layout="@layout/layout_bottom_sheet"/>

</Android.support.design.widget.CoordinatorLayout>

これは私のツールバーのレイアウトです

<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.v7.widget.Toolbar
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:app="http://schemas.Android.com/apk/res-auto"
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="@Android:color/transparent"
        Android:theme="@style/ToolbarTheme"
        app:popupTheme="@style/AppTheme.PopupOverlay">

        <Android.support.v7.widget.AppCompatImageView
            Android:layout_width="wrap_content"
            Android:layout_height="?actionBarSize"
            Android:layout_centerHorizontal="true"
            Android:layout_gravity="center"
            Android:adjustViewBounds="true"
            app:srcCompat="@drawable/ic_fynd_logo_red"/>

    </Android.support.v7.widget.Toolbar>
</Android.support.design.widget.CoordinatorLayout>

ご覧のとおり、フラグメントレイアウトを使用すると、Googleマップがステータスバーの下に描画されます。

会社のロゴが表示されるアクションバーがあります。

また、他のUIボタン「layout_action_buttons」もCoordinatorレイアウトでラップされているため、fitsSystemsWindowsが機能します。

見てみな。

enter image description here

2
Pedro Varela

enter image description here

あらゆる活動でこれを達成するために

  1. スタイルを追加します。
 <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
                <item name="colorPrimary">@color/colorPrimary</item>
                <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
                <item name="colorAccent">@color/colorAccent</item>
                <item name="Android:statusBarColor">@Android:color/transparent</item>
                <item name="Android:windowBackground">@Android:color/white</item>
            </style>
  1. CoordinatorLayoutをXMLのルートレイアウトとして使用する

  2. Oncreate()メソッドで、setcontentviewを使用する前

    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLEまたはView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

0