Проблема высоты при окрашивании BottomNavigationView

Я хочу реализовать цветной BottomNavigationView с elevation (текущая версия библиотеки дизайна 25.2.0, тестовое устройство 7.1.2). Некоторый код для запуска:

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_gravity="bottom"
    android:elevation="8dp"
    app:elevation="8dp"
    app:menu="@menu/bottom_navigation" />

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

    android:background="@android:color/white"

но я хотел установить цвет для фона и белых значков и текста... с нижними строками

    app:itemIconTint="@color/white"
    app:itemTextColor="@color/white"

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

    app:itemBackground="@drawable/bottom_navigation_item_background"

и для рисования/

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/mycolor_dark"/>
    <item android:drawable="@color/mycolor"/>
</selector>

для drawable-v21/ (пульсация)

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@android:color/white">
    <item android:drawable="@color/mycolor"/>
</ripple>

и теперь у нас есть цветные предметы и... снова нет возвышения! и это будет работать, когда mycolor будет белым (высота показана/нарисована)... поэтому, когда я хочу высоту для BottomNavigationView, и background, и itemBackground должны быть белыми...

интересная часть (доказательство проблемы?) — давайте проверим высоту только с помощью этого селектора:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@android:color/white"/>
    <item android:drawable="@color/mycolor"/>
</selector>

бар рисуется вообще без возвышения, но когда я нажимаю на любой пункт меню, то его фон меняется на белый и... над этим пунктом есть возвышение, ТОЛЬКО этот пункт!

когда я удаляю строку <item android:drawable="@color/mycolor"/> из файла drawable-v21/ XML (или устанавливаю mycolor белым), отображается высота. цвет пульсации не имеет значения, он может быть белым или любым другим (рабочим).

вопрос: как стилизовать BottomNavigationView с помощью пользовательского цвета фона, чтобы высота работала?


person snachmsm    schedule 13.04.2017    source источник


Ответы (1)


Я использовал app:theme="@style/AppTheme.PopupOverlay", чтобы использовать цвета моего приложения. Они автоматически устанавливаются на них. Например, если ваш основной цвет зеленый, значки и текст будут отображаться зеленым цветом. Вам нужно сохранить белый фон и высоту...

person Tim241    schedule 26.06.2017