Android - изменение цвета фона отдельного элемента в NavigationView

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

Я попытался сделать это, получив строку заголовка и установив BackgroundColorSpan, но он меняет только цвет фона TextView.

val proItem = nav_view.menu.findItem(R.id.pro_item)
        val spanString = SpannableString(proItem.title)
        spanString.setSpan(BackgroundColorSpan(R.color.colorAccent), 0, spanString.length, 0)
        proItem.title = spanString

Я искал что-то похожее на тег app:itemBackground в NavigationView, но он делает это для каждого отдельного элемента в списке, в то время как я хотел сделать это только для одного.

Есть ли способ этого добиться?

0
0
605
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

app:itemBackground можно использовать для изменения цвета фона. Вы можете создать селектор для отмеченного состояния и ссылаться на него в xml.

selector.xml

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

colors.xml

<color name = "btn_color_green_alpha">#3300ff00</color>

файл макета

<android.support.design.widget.NavigationView
        android:id = "@+id/nav_view"
        android:layout_width = "wrap_content"
        android:layout_height = "match_parent"
        android:layout_gravity = "start"
        android:fitsSystemWindows = "true"
        app:itemBackground = "@drawable/selector"   //line to be added
        app:headerLayout = "@layout/nav_header_main2"
        app:menu = "@menu/activity_main2_drawer" />

Надеюсь это поможет.

Если вам нужен только один элемент выбранного цвета и вы не хотите применять его к другим, вы можете сделать другие элементы флажком = false.

<menu xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
tools:showIn = "navigation_view">

    <group android:checkableBehavior = "single">
    <item
        android:id = "@+id/nav_camera"
        android:icon = "@drawable/ic_menu_camera"
        android:title = "Import" />
    <item
        android:id = "@+id/nav_gallery"
        android:checkable = "false"                  //line added here
        android:icon = "@drawable/ic_menu_gallery"
        android:title = "Gallery" />
    <item
        android:id = "@+id/nav_slideshow"
        android:icon = "@drawable/ic_menu_slideshow"
        android:title = "Slideshow" />
    <item
        android:id = "@+id/nav_manage"
        android:icon = "@drawable/ic_menu_manage"
        android:title = "Tools" />
    </group>
</menu>

Спасибо за ответ, но это меняет цвет для каждого элемента, верно? потому что мне нужно изменить цвет фона только одного элемента

Daniele 26.05.2018 17:48

вы можете попробовать взлом, добавленный в ответ. Надеюсь, поможет.

rafa 26.05.2018 18:06

да. это изменяет цвет фона выбранного элемента в этом случае. Но если вы не хотите, чтобы это произошло, вы можете сделать checkable = false для всех элементов, кроме первого.

rafa 27.05.2018 03:28

Другие вопросы по теме