在BottomNavigationView

时间:2018-04-10 09:48:35

标签: android kotlin bottomnavigationview

我正在寻找一种在我的BottomNavigationView中以编程方式更改项目颜色的方法。

我发现了如何更改图标颜色,我按照以下方式进行了操作:

fun setMenu(selected: Int) {
    bottomNavigationMenu?.let {
        it.menu.findItem(R.id.bottom_menu_home).icon
                .setColorFilter(getMenuColor(R.id.bottom_menu_home, selected), PorterDuff.Mode.SRC_ATOP)
        // more items
        it.menu.findItem(R.id.bottom_menu_fidelity)?.icon
                ?.setColorFilter(getMenuColor(R.id.bottom_menu_fidelity, selected), PorterDuff.Mode.SRC_ATOP)
    }
}

fun getMenuColor(id: Int, selected: Int): Int {
    if (Singletons.restaurant.title.isBlank())
        getRestaurant()
    else {
        if (id == selected) return (Singletons.restaurant.color)
        else return ContextCompat.getColor(this, R.color.grey7E)
    }
    return (0)
}

现在我正在寻找如何更改标题颜色。 我正在寻找像

这样的东西
it.menu.findItem(R.id.bottom_menu_home).title // etc

但我无法找到正确的功能。

以下是来自 main_bottom_menu.xml 的项目:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/bottom_menu_home"
        android:enabled="true"
        android:icon="@drawable/ic_home"
        android:iconTint="@color/cardview_dark_background"
        android:title="@string/bottom_menu_home"
        android:visible="false"
        app:showAsAction="ifRoom" />

    <!-- 3 more items -->

    <item
        android:id="@+id/bottom_menu_profile"
        android:enabled="true"
        android:icon="@drawable/ic_profile"
        android:iconTint="@color/cardview_dark_background"
        android:title="@string/bottom_menu_profile"
        android:visible="false"
        app:showAsAction="ifRoom" />

</menu>

奇怪的是,文本颜色等于我的colorPrimary,因此必须将其设置在某处。 目标是动态设置颜色(来自API)。 知道我的标题颜色在哪里?

1 个答案:

答案 0 :(得分:1)

要设置所有项目的颜色,只需在BottomNavigationView个实例上调用setItemTextColor()即可。

要单独设置它们,您可以使用SpannableString

val titleSpannable = SpannableString("title")

titleSpannable.setSpan(
    ForegroundColorSpan(Color.parseColor("#ffffff")),
    0,
    titleString.length,
    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

bottomNavigationView.menu.findItem(R.id.your_item_id).title = titleSpannable