Заменить навигацию Посмотреть элемент Ripple Effect - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь заменить то, что мне показалось фоном элемента по умолчанию NavigationView.Поэтому я создал рисованный элемент для замены фона и применил его, используя атрибут itemBackground.

background_navigation_view_item.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/navigation_item_background_tint">
    <item android:id="@android:id/mask" android:top="4dp" android:bottom="4dp" android:left="8dp" android:right="8dp">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <corners android:radius="3dp"/>
        </shape>
    </item>
    <item android:top="4dp" android:bottom="4dp" android:left="8dp" android:right="8dp">
        <selector>
            <item android:state_checked="true">
                <shape android:shape="rectangle">
                    <solid android:color="@color/navigation_item_background_tint"/>
                    <corners android:radius="3dp"/>
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="@android:color/transparent"/>
                    <corners android:radius="3dp"/>
                </shape>
            </item>
        </selector>
    </item>
</ripple>

Элемент фона для рисования выглядит великолепно, когдаэлемент выбран («Элементы управления выделением» - это выбранный элемент на изображении ниже).Но когда по элементу щелкают («Индикаторы хода выполнения» ниже), оказывается, что используются рисование по умолчанию и по рисованию background_navigation_view_item.xml (должен отображаться только прямоугольник со скругленными углами, а не окружающий прямоугольник)это).

Navigation View Ripple Effect

Я также проверил рисование как фон проверяемого вида, и оно работает так, как я и ожидал.Так что, если это не ошибка в коде для моей прорисовки, почему бы не заменить исходную прорисовку фона?

1 Ответ

2 голосов
/ 30 апреля 2019

Я уже ответил на этот вопрос здесь

Примечание: Этот код просто удаляет непрозрачность фоновой ряби по умолчанию

В любом случае, я отвечу здесь снова.

Предполагается, что ваш код NavigationView:

<com.google.android.material.navigation.NavigationView
android:id="@+id/navigation_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/your_menu"
app:itemBackground="@drawable/background_navigation_view_item.xml"/>

Что я сделал, так это добавил атрибут темы в NavigationView:

android:theme="@style/NavigationItemNoRipple"

В styles.xml:

<style name="NavigationItemNoRipple">
    <item name="android:colorControlHighlight">@android:color/transparent</item>
</style>
...