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
スタイルを削除するか、false
でFullscreen
に設定すると、ナビゲーションバーの問題が修正されます。問題は、ステータスバーが透明のままで、その背後にあるコンテンツを表示するのではなく、完全に白になることです。
レイアウトでfitsSystemWindow="true"
を使用しようとしましたが、問題は修正されませんでした。誰がこれが起こっているのか知っていますか?
Android:windowTranslucentNavigation
はAndroid:statusBarColor
はしません。これはSYSTEM_UI_FLAG_LAYOUT_STABLE
およびSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
フラグ。
これらは、ステータスバーの背後に描画するために要求する必要があるものです。
onCreate
のActivity
でリクエストします:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
または、アプリのテーマの背景を設定するだけで、ステータスバーの背後にポップアップすることもできます。
詳細情報 こちら 。
私の知る限り、APIのステータスバーの色を19未満に設定する適切な方法はありません。
API 19以降では、ステータスバーにのみwindowTranslucentNavigation
と同様の属性を使用できます。
<item name="Android:windowTranslucentStatus">true</item>
注:
白いステータスバーが表示された理由は、
<item name="Android:statusBarColor">@color/transparent</item>
特定のメーカーのデバイスで動作する ハック がありますが、私は自分で使用しません。
私はこれに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が機能します。
見てみな。
あらゆる活動でこれを達成するために
<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>
CoordinatorLayoutをXMLのルートレイアウトとして使用する
Oncreate()メソッドで、setcontentviewを使用する前
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLEまたはView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN