[解決済み] ナビゲーションドロワーがステータスバーの上に半透明に表示される不具合
質問
Androidプロジェクトで、Navigation Drawerを実装しています。私は、新しい
マテリアル デザイン仕様
と
マテリアル デザイン チェックリスト
.
仕様では、スライドアウト ペインはステータス バーを含む他のすべての上にフロートし、ステータス バーの上を半透明にする必要があるとされています。
私のナビゲーション パネルはステータス バーの上にありますが、透明ではありません。次のコードに従いました。 SO の投稿を、上記のリンク先のGoogle開発者ブログスポットで提案されているようにしました。 DrawerLayoutを使用してActionBar/Toolbarの上とステータスバーの下に表示するにはどうすればよいですか? .
以下は私のXMLレイアウトです。
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_drawer_layout"
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.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="@color/appPrimaryColour" />
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout"
android:layout_width="304dp"
android:layout_height="match_parent"
android:layout_gravity="left|start"
android:fitsSystemWindows="true"
android:background="#ffffff">
<ListView android:id="@+id/left_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"></ListView>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
以下は私のアプリのテーマです。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/appPrimaryColour</item>
<item name="colorPrimaryDark">@color/appPrimaryColourDark</item>
<item name="colorAccent">@color/appPrimaryColour</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
</style>
以下は私のアプリv21のテーマです。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/appPrimaryColour</item>
<item name="colorPrimaryDark">@color/appPrimaryColourDark</item>
<item name="colorAccent">@color/appPrimaryColour</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
以下は私のonCreateメソッドです。
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
mDrawerLayout = (DrawerLayout)findViewById(R.id.my_drawer_layout);
mDrawerList = (ListView)findViewById(R.id.left_drawer);
mDrawerLayout.setStatusBarBackgroundColor(
getResources().getColor(R.color.appPrimaryColourDark));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
LinearLayout linearLayout =
(LinearLayout)findViewById(R.id.linearLayout);
linearLayout.setElevation(30);
}
以下は スクリーンショット 私のナビゲーションドロワーは、トップが半透明ではありません。
どのように解決するのですか?
ステータスバーの背景が白で、ドロワーの背景は
LinearLayout
. なぜですか?あなたは、設定
fitsSystemWindows="true"
を設定します。
DrawerLayout
と
LinearLayout
の中にあります。これによって、あなたの
LinearLayout
を展開します。
の後ろに
の後ろに展開します(透明です)。したがって、ステータス バーの引き出し部分の背景を白にします。
ドロワーをステータスバーの後ろに出したくない場合(ステータスバー全体の背景を半透明にしたい場合)には、次の2つの方法があります。
1) 単純に、背景のあらゆる値を
LinearLayout
の背景値を削除し、その中のコンテンツの背景を着色することができます。または
2)
fitsSystemWindows="true"
を削除することができます。
LinearLayout
. この方がより論理的ですっきりしたアプローチだと思います。また、ナビゲーションドロワーが伸びていないステータスバーの下に影が落ちることも避けられます。
ドロワーをステータスバーの後ろに伸ばし、半透明でステータスバーの大きさのオーバーレイを表示させたい場合は
ScrimInsetFrameLayout
をドロワーコンテンツのコンテナとして使用することができます (
ListView
) を作成し、ステータスバーの背景を
app:insetForeground="#4000"
. もちろん
#4000
を好きなように変更することができます。ただし
fitsSystemWindows="true"
を残すことを忘れないでください。
また、コンテンツをオーバーレイさせずに無地のみを表示させたい場合は、背景を
LinearLayout
の背景を好きな色に設定することができます。ただし、コンテンツの背景を別に設定することを忘れないでください。
EDITです。 もう、何も対応する必要はありません。ご覧ください。 デザインサポートライブラリ を参照してください。
関連
-
[解決済み] ナビゲーションドロワー(Google+とYouTubeの比較)
-
[解決済み] DrawerLayoutを使用して、ActionBar/Toolbarの上やステータスバーの下に表示するにはどうすればよいですか?
-
[解決済み】Androidでステータスバーの色を変更する方法は?
-
[解決済み】ナビゲーションドロワー。起動時に選択された項目を設定するには?
-
[解決済み】Android ステータスバーが完全に透明化?
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] onCreate(Bundle savedInstanceState)とは?
-
[解決済み] TextView.setTextSizeの挙動がおかしい - テキストビューのテキストサイズを画面ごとに動的に設定する方法
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] google-services.jsonって実際何してるの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DrawerLayoutを使用して、ActionBar/Toolbarの上やステータスバーの下に表示するにはどうすればよいですか?
-
[解決済み】色の16進数透明度について【重複あり
-
[解決済み】Androidで色を理解する(全6文字)
-
[解決済み] 設定ページに移動せずに位置情報サービスをオンにする
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] Android Lintが翻訳されていない文字列を訴えないようにする。