android.support.design.widget.BottomNavigationПосмотрите, как я могу изменить значок невыбранных элементов вместо просто цвета оттенка - PullRequest
0 голосов
/ 22 марта 2019

Прежде всего, если он дублируется, пожалуйста, дайте мне знать, потому что я не могу его найти.

Я работаю с BottomNavigationView с пользовательскими значками.

Моя проблема в том, что после выбора элемента, когда он не выбран, значок меняет свой цвет / оттенок, а не возвращается в исходное состояние.

Проблема возникает только с вкладкой сообщений.

Это начальное состояние (речевой пузырь имеет только границы)

Initial stage

Это когда он выделен

Highlighted stage

Это неправильный (речевой пузырь теперь сплошного белого цвета, но должен иметь только границу)

Wrong sate

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

Это метод

private val onNavigationItemSelected = BottomNavigationView.OnNavigationItemSelectedListener {

    var result = false
    when (it.itemId) {
        R.id.bottombarWalks -> {
            it.icon = ResourcesCompat.getDrawable(resources, R.drawable.walks_on,null)
            switchFragment(0, WalksFragment())
            result = true
        }
        R.id.bottombarMembership -> {
            it.icon = ResourcesCompat.getDrawable(resources, R.drawable.membership_on,null)
            switchFragment(1, TabFragment.newInstance("Membership tab"))
            result = true
        }
        R.id.bottombarHome -> {
            it.icon = ResourcesCompat.getDrawable(resources, R.drawable.home_on,null)
            switchFragment(2, HomeFragment())
            result = true
        }
        R.id.bottombarMessages -> {
            it.icon = ResourcesCompat.getDrawable(resources, R.drawable.messages_on,null)
            switchFragment(3, MessagesTabFragment())
            result = true
        }
        R.id.bottombarMore -> {
            it.icon = ResourcesCompat.getDrawable(resources, R.drawable.more_on,null)
            switchFragment(4, MoreFragment())
            result = true
        }
    }
    result
}

Заранее спасибо

@ Решение FrancislainyCampos

Это XML, определяющий вкладки bottomNavBar после применения предложения @FrancislainyCampos

bottomBar_menu

Это селектор, который я добавил

tab_selector

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

java.lang.RuntimeException: Unable to start activity ComponentInfo{uk.org.ramblers.walkreg/uk.org.ramblers.walkreg.ui.MainActivity}: android.view.InflateException: Binary XML file line #22: Binary XML file line #22: Error inflating class android.support.design.widget.BottomNavigationView
[...]
     Caused by: android.view.InflateException: Binary XML file line #22: Binary XML file line #22: Error inflating class android.support.design.widget.BottomNavigationView
     Caused by: android.view.InflateException: Binary XML file line #22: Error inflating class android.support.design.widget.BottomNavigationView
     Caused by: java.lang.reflect.InvocationTargetException
[...]
     Caused by: android.content.res.Resources$NotFoundException: Drawable uk.org.ramblers.walkreg:drawable/tab_selector with resource ID #0x7f0700ce
     Caused by: android.content.res.Resources$NotFoundException: File res/drawable/tab_selector.xml from drawable resource ID #0x7f0700ce

У кого-то была другая идея ... Я счастлив попробовать что угодно, потому что у меня нет идей

1 Ответ

0 голосов
/ 26 марта 2019

Вот что у меня есть на проекте :

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

<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">

<item
        android:id="@+id/tab_home"
        android:icon="@drawable/home_blue"
        android:title="@string/tab_home"
        app:showAsAction="always"/>

<item
        android:id="@+id/tab_location"
        android:icon="@drawable/ic_location"
        android:title="Location"
        app:showAsAction="always"/>

<item
        android:id="@+id/tab_tic_tac_toe"
        android:icon="@drawable/ic_tic_tac_toe"
        android:title="Tic Tac Toe"
        app:showAsAction="always"/>

 private fun bottomBarNavigationView() {

    navigation.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener)
    navigation.selectedItemId = R.id.tab_tic_tac_toe
}

private val onNavigationItemSelectedListener = object : OnNavigationItemSelectedListener {
    override fun onNavigationItemSelected(item: MenuItem): Boolean {

        when (item.itemId) {
            R.id.tab_home -> {
                displayView(FRAG_COUNTER)

                return true
            }

            R.id.tab_location -> {
                displayView(FRAG_LOCATION)

                return true
            }

            R.id.tab_tic_tac_toe -> {
                displayView(FRAG_TIC_TAC)

                return true
            }

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