Значок выбора нижней навигации не отображается?

#android #android-layout #kotlin #bottomnavigationview

#Android #android-макет #kotlin #bottomnavigationview

Вопрос:

Я использую нижний вид навигации для отображения своего меню. когда я запускаю приложение, оно не отображает выбранный значок и текст, см. Изображение ниже.(Приложение использует файлы изображений svg (xml))

И сокращение размера текста, когда его длина больше, а табуляция больше 3 или 4 См. Это изображение для сокращения текста

введите описание изображения здесь

Здесь мой код MainActivity xml-файл

  <android.support.design.widget.BottomNavigationView
            android:id="@ id/navigation"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="0dp"
            android:layout_marginStart="0dp"
            app:labelVisibilityMode="labeled"
            android:background="?android:attr/windowBackground"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:menu="@menu/navigation"/>

<?xml version="1.0" encoding="utf-8"?>
 

Меню навигации

 <item
        android:id="@ id/navigation_home"
        android:icon="@drawable/ic_home_light"
        android:title="@string/str_home"/>

<item
        android:id="@ id/navigation_medidate"
        android:icon="@drawable/ic_meditation_light"
        android:title="@string/str_meditade"/>

<item
        android:id="@ id/navigation_lessions"
        android:icon="@drawable/ic_lesson_light"
        android:title="@string/str_lessions"/>

<item
        android:id="@ id/navigation_sleep"
        android:visible="false"
        android:icon="@drawable/ic_sleep_light"
        android:title="@string/str_sleep"/>

<item
        android:id="@ id/navigation_cources"
        android:icon="@drawable/ic_course_light"
        android:visible="false"
        android:title="@string/str_courses"/>
 

Навигационный прослушиватель

 private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
        when (item.itemId) {
            R.id.navigation_home -> {
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_cources -> {
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_lessions -> {
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_medidate -> {
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_sleep -> {
                return@OnNavigationItemSelectedListener true
            }
        }
        false
    }
 

Комментарии:

1. Вам нужно добавить два чертежа, один для активного состояния, а второй для неактивного состояния. Ваш активный цвет для рисования — белый, поэтому он не отображается на выбранной вкладке.

2. Спасибо за вашу поддержку @Heisenberg

Ответ №1:

Попробуйте добавить селектор для значка оттенка selector_navigation.xml . Используйте app:itemIconTint атрибут.

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/blue" />
<item android:color="@android:color/darker_gray"  />
</selector>
 

и установите значение BottomNavigationView

  <android.support.design.widget.BottomNavigationView
                android:id="@ id/navigation"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:layout_gravity="start"
                android:elevation="4dp"
                android:background="@color/white"
                app:itemTextColor="@color/darker_gray"
                app:menu="@menu/navigation"
                app:layout_behavior="BottomNavigationBehavior"
                app:itemIconTint="@drawable/selector_navigation" />
 

Ответ №2:

Вы можете изменить размер текста выбранной или невыбранной вкладки.Добавьте приведенный ниже код в dimens.xml

     <dimen name="design_bottom_navigation_text_size">11sp</dimen>
    <dimen name="design_bottom_navigation_active_text_size">12sp</dimen>
 

Ниже приведен код для других пользовательских размеров

     <dimen name="design_bottom_navigation_active_item_max_width">168dp</dimen>
    <dimen name="design_bottom_navigation_active_item_min_width">96dp</dimen>       
    <dimen name="design_bottom_navigation_elevation">8dp</dimen>
    <dimen name="design_bottom_navigation_height">56dp</dimen>
    <dimen name="design_bottom_navigation_icon_size">20dp</dimen>
    <dimen name="design_bottom_navigation_item_max_width">96dp</dimen>
    <dimen name="design_bottom_navigation_item_min_width">56dp</dimen>
    <dimen name="design_bottom_navigation_margin">8dp</dimen>
    <dimen name="design_bottom_navigation_shadow_height">1dp</dimen>
    <color name="design_bottom_navigation_shadow_color">#14000000</color>
 

Ответ №3:

Нужно вернуть значение «true» вместо false при onNavigation нажмите listner

 private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
    when (item.itemId) {
        R.id.navigation_home -> {
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_cources -> {
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_lessions -> {
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_medidate -> {
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_sleep -> {
            return@OnNavigationItemSelectedListener true
        }
    }
    true
}