[解決済み] Lollipop : ステータスバーの背後に描画し、その色を透明に設定する。
質問
ロリポップ用にステータスバーの色を透明に設定しました。
<item name="android:statusBarColor">@android:color/transparent</item>
さて、その後ろに描画する必要があるのですが、どのビューも後ろに描画することができません。を使って行う方法は知っています。
windowTranslucentStatus
プロパティがありますが、このプロパティを使用すると、statusBarの色がtransparentに設定されていることを無視してしまうので、使用したくありません。
解決方法は?
方法その1。
完全に透明なステータスバーを実現するためには
statusBarColor
これは、API 21 以上で利用可能です。
windowTranslucentStatus
はAPI 19以降で利用可能ですが、ステータスバーに色付きの背景が追加されます。ただし
windowTranslucentStatus
を変更することで、1つのことが実現できます。
statusBarColor
を透明にすることはできません。
SYSTEM_UI_FLAG_LAYOUT_STABLE
と
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
フラグを使用します。同じ効果を得る最も簡単な方法は、これらのフラグを手動で設定することです。これは、Androidレイアウトシステムが課すインセットを効果的に無効にし、自分自身で対処できるようにします。
この行は
onCreate
メソッドを使用します。
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
また、/res/values-v21/styles.xmlで透明度を必ず設定してください。
<item name="android:statusBarColor">@android:color/transparent</item>
または、プログラムで透明度を設定する。
getWindow().setStatusBarColor(Color.TRANSPARENT);
この方法の良い点は、透明なステータスバーを半透明な色調のステータスバーに置き換えることで、API 19でも同じレイアウトとデザインを使用できることです。
<item name="android:windowTranslucentStatus">true</item>
方法その2。
ステータスバーの背後にビューを配置するのではなく、ステータスバーの下に背景画像を描くだけでよい場合は、方法1のように、アクティビティのテーマの背景を希望の画像に設定し、ステータスバーの透明度を設定するだけで実現できます。のスクリーンショットを作成するために使用した方法です。 Android Policeの記事 数ヶ月前のものです。
方法その3。
あるレイアウトでは標準のシステムインセットを無視し、他のレイアウトでは動作させなければならない場合、唯一の実行可能な方法は、しばしばリンクされている
ScrimInsetsFrameLayout
クラスがあります。もちろん、そのクラスで行われていることのいくつかは、すべてのシナリオで必要なことではありません。たとえば、合成ステータス・バー・オーバーレイを使用する予定がない場合は、単に
init()
メソッドを使用し、attrs.xml ファイルに何も追加する必要はありません。私はこの方法がうまくいくのを見たことがありますが、回避するために多くの作業を必要とする可能性がある他の意味をもたらすことが分かると思います。
また、複数のレイアウトをラップすることに反対されているとお見受けしました。あるレイアウトを別のレイアウトの内側でラップする場合、両方のレイアウトに
match_parent
の高さと幅のために、パフォーマンスへの影響は心配するにはあまりに些細です。とはいえ、このクラスが継承しているクラスを
FrameLayout
を好きなタイプのLayoutクラスに変更してください。これで問題なく動作します。
関連
-
[android studio]com.android.ide.common.process.ProcessException: aaptの実行に失敗しました
-
Gradle の同期に失敗しました。com.android.tools.build:gradle が見つかりませんでした。
-
android E/RecyclerView﹕ アダプタが接続されていないため、レイアウトをスキップする。
-
Android のパッケージングに失敗し、Android リソースのリンクに失敗したことを示すプロンプトが表示される
-
Android開発で「Attempt to invoke virtual method 'XXX()' on null object reference」というヌルポインター例外に遭遇する。
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
Androidで、onTouchEventでダブルクリックを実装し、ダブルクリックイベントとして判定する方法
-
Androidの美しいSeekBarスタイルのカスタマイズ
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み】appcompat v7でEditTextの最下行の色を変更する。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
adb devices OffLine Solution(オフラインソリューション
-
Gradle の同期に失敗しました。com.android.tools.build:gradle が見つかりませんでした。
-
Android のパッケージングに失敗し、Android リソースのリンクに失敗したことを示すプロンプトが表示される
-
android exception - aapt.exe has stopped working.
-
エラータイプ 3 タイプエラー, Error: アクティビティクラス{}が存在しません。アクティビティ起動時のエラー 解決方法
-
Android TextViewにandroid:ellipsize=endのバグがある。
-
ConstraintLayoutのいくつかのプロパティの概要(RelativeLayoutの強化版、LinearLayoutの比例プロパティを含む、階層ツールの削減)。
-
Android--shape--描画のコーナー、グラデーション、パディング、サイズ、ソリッド、ストロークのプロパティを指定する。
-
アプリの実行エラー。ターゲットデバイスが見つからない問題
-
[解決済み] DrawerLayoutを使用して、ActionBar/Toolbarの上やステータスバーの下に表示するにはどうすればよいですか?