Навигация ящика полупрозрачный над строке состояния не работает

? 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 выше 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>

Не забывайте, что color (ресурс) должен быть в формате #AARRGGBB . Это означает, что цвет будет также включать в себя значение альфа .



2Michele La Ferla @

Почему бы не использовать что-то похожее на это ?

<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>
3markus-hi @

Вы должны обернуть навигации макет ящик внутри ScrimLayout .

ScrimLayout в основном рисует полупрозрачное прямоугольник макета навигации ящик. Чтобы получить размер вставке просто переопределить fitSystemWindows в вашей ScrimLayout .

@Override
protected boolean fitSystemWindows(Rect insets) {
    mInsets = new Rect(insets);
    return true;
}

Позже коррекции onDraw нарисовать полупрозрачный прямоугольник.

https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java Реализация может быть найдено в источнике Google IO App .  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 шестнадцатеричных цифр), так что вы должны ARGB ( две цифры значения альфа ) ( 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 : если у вас есть де шестнадцатеричный цвет (# 111111 ) просто поставить одно из значений непрозрачности, чтобы получить прозрачность. как это: (# 11111100 )

Мой ящик не распространяется на панель действий ( как у вас ), нопрозрачность может быть применен и в этих случаях . Вот мой код :

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

А вот еще http://stackoverflow.com/questions/15852122/hex-transparency-in-colors, которые могут помочь вам понять альфа коды в шестнадцатеричном цветов.

5xip @

Строке состояния фон белый ,фон вашего ящика LinearLayout . Почему ? Вы настроек fitsSystemWindows = " True" для вашего DrawerLayout иLinearLayout внутри него. Это вызывает ваш LinearLayout расширить за строке состояния (который является прозрачным ) . Таким образом, делая фон для выдвижного ящика части строки состояния белого цвета.

" __rsm__ " Если вы не хотите, чтобы ваш ящик, чтобы продлить за строке состояния ( хотите иметь полупрозрачный фон для бара всей состояния), вы можете сделать две вещи:

1 ) Вы можете просто удалить любые фоновые значения из вашего LinearLayout и цвет фона вашего содержания внутри него. или

2 ) Вы можете удалить fitsSystemWindows="true" из LinearLayout . Я думаю, что этоболее логично и чище подход . Вы также избежатьтени быть брошенным под статусной строке, где навигационная ящик не выдвигается.

" __rsm__ " Если вы хотите, чтобы ваш ящик, чтобы продлить за строке состояния и имеют полупрозрачный, строка состояния размера сегмента вы можете использовать https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java в качестве контейнера для содержания ящик ( ListView ) и установить фон в строке состояния, используя app:insetForeground="#4000" . Конечно, вы можете изменить #4000 все, что вы хотите. Не забудьте сохранить fitsSystemWindows="true" здесь !

Или, если вы не хотите наложить свое содержание и отображать только с цветом, вы можете просто установить фон вашего LinearLayout все, что вы хотите. Не забудьте установить фон вашего содержания отдельно, хотя!

Навигация ящика полупрозрачный над строке состояния не работает