私の活動にappcompat v21のツールバーが欲しいのですが。しかし、私が実装しているツールバーはステータスバーの下に重なっています。どうすれば修正できますか?
これがアクティビティレイアウトxmlです。
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<include
Android:id="@+id/toolbar"
layout="@layout/toolbar" />
<FrameLayout
Android:id="@+id/container"
Android:layout_width="fill_parent"
Android:layout_height="0dp"
Android:layout_weight="1" />
</LinearLayout>
ツールバー表示:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize"
Android:background="?attr/colorPrimary" />
テーマスタイル:
<style name="AppTheme" parent="MaterialNavigationDrawerTheme.Light.DarkActionBar">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
</style>
レイアウトのルートビューでAndroid:fitsSystemWindows="true"
を使用します(あなたの場合はLinearLayout)。そしてAndroid:fitsSystemWindows
は
ステータスバーなどのシステムウィンドウに基づいてビューレイアウトを調整するための内部属性。 trueの場合、システムウィンドウ用のスペースを空けるためにこのビューの余白を調整します。このビューが非埋め込みアクティビティにある場合にのみ有効になります。
「true」または「false」のブール値でなければなりません。
これは、この型の値を含むリソース( "@ [package:] type:name"形式)またはテーマ属性( "?[package:] [type:] name"形式)への参照である。
これは、グローバル属性リソースシンボルfitsSystemWindowsに対応します。
これをv21/styles.xmlファイルに設定するだけです。
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
<item name="Android:statusBarColor">@color/colorPrimaryDark</item>
そして確かに
<item name="Android:windowTranslucentStatus">false</item>
答えのどれも私のために働きませんでした、しかしこれは私がルートビューでAndroid:fitSystemWindows
を設定した後に最終的にうまくいったものです(私はスタイルv21でこれらを設定しました):
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
<item name="Android:windowTranslucentStatus">false</item>
ASがデフォルトで次の行を記述しているので、しないと書いてください。
<item name="Android:statusBarColor">@Android:color/transparent</item>
私にとって、問題は私が例から何かをコピーして使用していたということでした
<item name="Android:windowTranslucentStatus">true</item>
これを削除するだけで問題が解決しました。
下記のすべての行を/ res/values-v21/styles.xmlから削除しましたが、現在は正常に動作しています。
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
<item name="Android:statusBarColor">@Android:color/transparent</item>
<item name="windowActionBar">false</item>
<item name="Android:windowDisablePreview">true</item>
<item name="windowNoTitle">true</item>
<item name="Android:fitsSystemWindows">true</item>
答えのどれも私のために働きませんでした、しかしこれは私が設定した後に最終的に働いたものですAndroid:fitsSystemWindows = "false"
親の活動レイアウトファイルでは、それは多くの場所で提案されていませんが、それは私のために働くと私の一日を節約
スタイルまたはスタイルから下の行を削除する(21)
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
<item name="Android:statusBarColor">@color/colorPrimaryDark</item>
<item name="Android:windowTranslucentStatus">false</item>
Googleのドキュメントによると、我々はアプリのテーマでfitsSystemWindows属性を使用しないでください、それはレイアウトファイルで使用することを意図しています。テーマで使用すると、トーストメッセージに問題が生じる可能性があります。
<item name="Android:fitsSystemWindows">true</item>
正しい方法の使用例とwindowTranslucentStatusでも問題なく動作します。
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/drawer_layout"
Android:fitsSystemWindows="true"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
>
<include layout="@layout/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
</include>
<Android.support.design.widget.NavigationView
Android:id="@+id/nav_view"
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_gravity="start"
Android:fitsSystemWindows="true"
Android:background="@color/white"
Android:animateLayoutChanges="true"
app:headerLayout="@layout/navigation_drawer_header"
app:menu="@menu/navigation_drawer_menu" />
</Android.support.v4.widget.DrawerLayout>