動作していないステータスバーナビゲーションを引き出し半透明

? Boardy @ | Original: StackOverFlow

私はAndroidのプロジェクトに取り組んでいると私はナビゲーションドロワーを実装しています。私は新しいhttp://www.google.com/design/spec/patterns/navigation-drawer.htmlとを通して読んでいるhttp://android-developers.blogspot.co.uk/2014/10/material-design - オン - アンドロイド - checklist.html 。 スペックは、ペインからスライドがステータスバーを含む他のすべての上に浮遊し、ステータスバーの上に半透明であるべきであると述べている。

私のナビゲーションパネルには、ステータスバーの上にあるが、その任意の透明性を持っていない。上記のGoogleの開発者のブログスポット、リンクで提案されているように私はこのSOポストからコードを追ってきたhttp://stackoverflow.com/questions/26440879/how-do-i-use-drawerlayout-to-display-over-the-actionbar-toolbar-and-under-the-st/26440880 。

以下は、私の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);
    }

以下は、トップを示す私のナビゲーションドロワーのスクリーンショットは、透明半ではありません

動作していないステータスバーナビゲーションを引き出し半透明



Top 5 Respuesta

1mroczis @

あなたがする必要があるのは、ステータスバーのためのいくつかの半透明の色を使用することです。あなたのV21テーマに以下の行を追加します。

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/desired_color</item>

「 ____ 」 (リソース)は、フォーマット#AARRGGBBになければならないことを忘れないでください。この色はまた、アルファ値を含むことを意味する。



2Michele La Ferla @

なぜこれに似たものを使うのか?

color
3markus-hi @

あなたはScrimLayout内部のナビゲーションの引き出しのレイアウトをラップする必要があります。

ScrimLayoutは基本的にあなたのナビゲーションの引き出しのレイアウトの上に半透明の四角形を描画します。 あなたのScrimLayoutの挿入図単に上書きする「 ____ 」のサイズを取得するには。

<android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

    <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    <ListView
            android:id="@+id/left_drawer"
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#80111111"/>
</android.support.v4.widget.DrawerLayout>

その後オーバーライド"____は「半透明の四角形を描画します。

アンhttps://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java実装は、Google IOアプリのソースで見つけることができます。  https://github.com/google/iosched/blob/master/android/src/main/res/layout/navdrawer.xmlあなたはそれがレイアウトXMLで使われているかを見ることができます。

4fdsilva @

私は自分のプロジェクトで実現するためにも、同様の機能を持っていた。と私はちょうど使用する私の引き出しは透明にするhttp://stackoverflow.com/questions/5445085/understanding-colors-in-android-6-characters/11019879#11019879 。 6進数を使用して、それぞれ、赤、緑、青の各値に対して2進数を持っている。あなたは二つの追加桁( 8桁の16進数)に入れ、もしそうなら、あなたはARGB (アルファ値のための2桁)を(持っているhttp://stackoverflow.com/questions/5445085/understanding-colors-in-android-6-characters/11019879#11019879 ) 。

ここでは六角不透明度の値は以下のとおりです。 2追加の数字のために

100% — FF

95% — F2

90% — E6

85% — D9

80% — CC

75% — BF

70% — B3

65% — A6

60% — 99

55% — 8C

50% — 80

45% — 73

40% — 66

35% — 59

30% — 4D

25% — 40

20% — 33

15% — 26

10% — 1A

5% — 0D

0% — 00

exempleの場合:あなたは、DE六角色( # 111111 )を持っている場合だけ透明性を得るために不透明度の値のいずれかを置く。このような: ( # 11111100 )を

私の引き出しは、 (あなたのような)アクションバーをカバーしていないが、透明性はまた、これらの場合にも適用することができる。ここに私のコードは次のとおりです。

fitSystemWindows

そして、ここであなたが六角色のアルファコードを理解するのに役立ちます別のhttp://stackoverflow.com/questions/15852122/hex-transparency-in-colorsです。

5xip @

あなたのステータスバーの背景は、あなたの引き出しのLinearLayoutの背景白いです。なぜ?あなたは、設定fitsSystemWindows =あなたのDrawerLayoutための「真」とその内部のLinearLayoutである。これが(透明である) 、ステータスバーの後ろに展開するためにあなたのLinearLayoutの原因となる。このように、ステータスバー白の引き出し部分の背景を作る。

「 __rsm__ " あなたは、ステータスバーの後ろに拡張するためにあなたの引き出しをしたくない場合は、二つのことを行うことができ、 (全体のステータスバーのための半透明の背景を持つようにしたい) :

1 )あなたは、単にあなたののLinearLayoutから任意の背景値を削除し、その中にあなたのコンテンツの背景に色をすることができます。または

2 )あなたは、あなたのLinearLayoutから「 ____ 」削除することができます。私は、これはより論理的かつクリーンなアプローチだと思う。また、影があなたのナビゲーションドロワーが拡張されません、ステータスバーの下にキャストされている必要がなくなります。

「 __rsm__ " あなたの引き出しは、ステータスバーの後ろに拡張したいと、半透明の、ステータスバーのサイズオーバーレイをお持ちの場合は、使用することができますhttps://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.javaあなたの引き出しのコンテンツ(リストビュー)のコンテナとして及び「 ____ 」を使用して、ステータスバーの背景を設定します。もちろん、あなたが望む何かに「 ____ 」に変更することができます。ここで「 ____ 」保つことを忘れないでください!

あなたがあなたのコンテンツをオーバーレイのみソリッドカラーを表示したくない場合は、ちょうどあなたがほしい何にあなたのLinearLayoutの背景を設定することができます。個別にもあなたのコンテンツの背景を設定することを忘れないでください!

動作していないステータスバーナビゲーションを引き出し半透明