Как добавить индикатор в BottomNavigationView выше, чем по умолчанию? - PullRequest
1 голос
/ 24 июня 2019

Фон

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

Что-то вродечто, но с большей высотой:

enter image description here

Это немного трудно увидеть на скриншоте, но индикатор показан в самом верхуЭлемент BottomNavigationView, прямо под тенью BottomNavigationView.

Проблема

Когда я устанавливаю большую высоту, я получаю, что каждый элемент по-прежнему занимает меньшую высоту, поэтому индикатор не смотрит сверху:

enter image description here

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

Что я нашел

О высоте, я нашел этот вопрос в StackOverflow ,изменения высоты.Единственное решение - переопределить размеры библиотеки.В данном случае это только следующее:

<dimen name="design_bottom_navigation_height" tools:override="true">...</dimen>

Однако это только решает проблему размещения индикатора сверху.

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

Вот соответствующий код, немного измененный из мастера Android Studioза изготовление "Нижняя навигационная деятельность".Остальное такое же, как и здесь:

activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/container" xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context=".MainActivity">

    <TextView
        android:id="@+id/message" android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginStart="@dimen/activity_horizontal_margin"
        android:layout_marginTop="@dimen/activity_vertical_margin" android:text="@string/title_home"
        app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view" android:layout_width="0dp"
        android:layout_height="@dimen/tabs_height" android:layout_marginEnd="0dp"
        android:layout_marginStart="0dp" android:background="?android:attr/windowBackground" app:itemBackground="@drawable/activity_main__tab_background"
        app:labelVisibilityMode="unlabeled" app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Dimens.xml

<dimen name="tabs_height">64dp</dimen>
<dimen name="design_bottom_navigation_height" tools:override="true">@dimen/tabs_height</dimen>

activity_main__tab_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <layer-list>
            <item android:gravity="top">
                <shape android:shape="rectangle">
                    <size android:height="2dp"/>
                    <solid android:color="#07a5ea"/>
                </shape>
            </item>
        </layer-list>
    </item>
</selector>

Вопрос

Как мне установить индикатор сверху, имея увеличенный вид BottomNavigationView и не теряя эффект нажатия?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...