У меня в приложении есть стандартный 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, но он делает это для каждого отдельного элемента в списке, в то время как я хотел сделать это только для одного.
Есть ли способ этого добиться?
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>
вы можете попробовать взлом, добавленный в ответ. Надеюсь, поможет.
да. это изменяет цвет фона выбранного элемента в этом случае. Но если вы не хотите, чтобы это произошло, вы можете сделать checkable = false для всех элементов, кроме первого.
Спасибо за ответ, но это меняет цвет для каждого элемента, верно? потому что мне нужно изменить цвет фона только одного элемента