web-dev-qa-db-ja.com

とを使用して半透明のシステムバーを使用できないのはなぜですか?

アプリをKitKatに更新する際に、Translucentプロパティを使用してKitKatに豪華な外観を与えたいと思いました。

半透明のシステムバー

新しいテーマTheme.Holo.NoActionBar.TranslucentDecorおよびTheme.Holo.Light.NoActionBar.TranslucentDecorを使用して、システムバーを部分的に半透明にすることができます。半透明のシステムバーを有効にすると、レイアウトはシステムバーの背後の領域を埋めるので、レイアウトのシステムバーで覆われない部分に対して[fitsSystemWindows] [4]も有効にする必要があります。

私の唯一の懸念は、Googleが望んでいるものとは反対に聞こえるActionBarを使用したいということです(両方のテーマにはNoActionBarがあります:

Theme.Holo.NoActionBar.TranslucentDecor 
Theme.Holo.Light.NoActionBar.TranslucentDecor 

私はハックやトリックを使ってそれを機能させるつもりはないので、これを達成する正しい方法があるかどうか、またはこれがGoogleのガイドラインに反するかどうかを知りたかっただけです。

enter image description here

35
Waza_Be

Android.R.attr#windowTranslucentStatustrueに設定して独自のテーマを作成すると、ActionBarを失うことなく同じ効果を実現できます。

ドキュメントから

このウィンドウが半透明のステータスバーを要求するかどうかを示すフラグ。 {@link Android.view.WindowManager.LayoutParams#FLAG_TRANSLUCENT_STATUS}に対応します。

スタイル-覚えておいてください、これらはvalues-v19に入ります。

<style name="TranslucentStatusBar" parent="@Android:style/Theme.Holo.Light">
    <item name="Android:actionBarStyle">@style/TranslucentActionBar</item>
    <item name="Android:windowTranslucentNavigation">false</item>
    <item name="Android:windowTranslucentStatus">true</item>
    <item name="Android:windowContentOverlay">@null</item>
</style>

<style name="TranslucentActionBar" parent="@Android:style/Widget.Holo.Light.ActionBar">
    <item name="Android:background">@Android:color/transparent</item>
</style>

レイアウト

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@Android:color/holo_blue_dark"
    Android:fitsSystemWindows="true" >

    <FrameLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:background="@Android:color/holo_purple" />

</FrameLayout>

結果

enter image description here

48
adneal

これはより少ない行で動作します:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
        Window w = getWindow(); // in Activity's onCreate() for instance
        w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }

誰かが追加することができれば素晴らしいでしょう、チェック方法、半透明のナビゲーションがまったく利用可能かどうか、N10 Build.VERSION_CODES.KitKatで半透明のナビゲーションが無効になります。編集:この質問に回答: 半透明のナビゲーションが利用可能かどうかを確認

40
stefple

以下のコードは私のアプリでうまく機能します。

半透明:

Window w = getWindow();
                w.setFlags(
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
                w.setFlags(
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

半透明でない設定:

final WindowManager.LayoutParams attrs = getWindow()
                        .getAttributes();
                attrs.flags &= (~WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
                attrs.flags &= (~WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                getWindow().setAttributes(attrs);
                getWindow().clearFlags(
                        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
29
Geek4IT

これは私が探していた答えです: https://github.com/jgilfelt/SystemBarTint

Android 4.4(KitKat)は、ステータスバーとナビゲーションバーに半透明のシステムUIスタイルを導入しました。これらのスタイルは、ホーム画面ランチャーなどの壁紙ベースのアクティビティには最適ですが、提供される最小限の背景保護により、レイアウト内に独自の背景を提供しない限り、他のタイプのアクティビティにはあまり役立ちません。特定のデバイス構成のシステムUIのサイズ、位置、および存在を決定するのは簡単ではありません。

このライブラリは、システムバーの背景「色合い」を作成する簡単な方法を提供します。色の値またはDrawableです。デフォルトでは、半透明の黒い背景が表示されます。これは、マップや写真グリッド上に配置する場合など、永続的なシステムUIが依然として重要なフルブリードコンテンツ画面に役立ちます。

enter image description here

17
Waza_Be

すべての答えは、プログラムまたはレイアウトからActionBarを拡張します:これは、アプリが起動または再作成されると、システムがテーマを探し(修正を認識していない)、非常にLYいステータスバーを色付きで表示することを意味しますウィンドウの背景が何であれ...!

テーマのみを使用してそれを行う方法の例を作成しました:

https://github.com/Takhion/Android-extendedactionbar

私はそれが誰かに役立つことを願っています:)

4
Takhion