Rav*_*avi 25 android bottomnavigationview
我已经实现BottomNavigationView了新支持库25.0.0中提供的功能.这是我的代码
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@drawable/text"
app:itemTextColor="@drawable/text"
app:menu="@menu/bottom_navigation_main" />
Run Code Online (Sandbox Code Playgroud)
并且text.xml可绘制
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white" android:state_enabled="true" />
<item android:color="@color/colorPrimaryDark" android:state_enabled="false" />
</selector>
Run Code Online (Sandbox Code Playgroud)
使用此代码,我可以在单击菜单项时更改文本颜色,但是当我对其应用相同的app:itemBackground内容时显示错误<item> tag requires a 'drawable' attribute or child tag defining a drawable.
这就是我的尝试 app:itemBackground
app:itemBackground="@drawable/text"
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何更改所选菜单项的背景颜色?
Rav*_*avi 36
从这个中等职位找到答案
android:state_checked而不是android:state_enabledonNavigationItemSelected你内部需要使用return true而不是return false.并设置背景下,我们不能使用android:color的<item>,我们需要使用android:drawable
所以在这里它的外观XML文件,当你设置它app:itemTextColor和app:itemIconTint
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/colorPrimaryDark" android:state_checked="true" />
<item android:color="@android:color/white" android:state_checked="false" />
</selector>
Run Code Online (Sandbox Code Playgroud)
并设置app:itemBackground选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/banner_white" android:state_checked="true"/>
<item android:drawable="@drawable/banner_green" android:state_checked="false"/>
</selector>
Run Code Online (Sandbox Code Playgroud)
这里banner_white和banner_greenpngs.
Unl*_*nja 14
我遇到了类似OP的问题,但有点不同.如果你把它@color/color_selector放入BottomNavigationView中app:itemBackground="___".它会导致视图隐藏在设计面板中,并且应用程序在启动时会被粉碎.虽然它只是将它设置为恒定的颜色,但工作正常@color/black.
为了更深入的解释,我挖到了android api参考.现在我想我找到了可以合理解决这个问题的答案.(可能不准确.)
问题是,你提供的并不完全是他们所要求的.
app:itemIconTint并app:itemTextColor要求一个十六进制颜色,同时app:itemBackground要求一个字面上的Drawable.<color>我们写的元素colors.xml是ColorDrawable.它源自Drawable,因此它可以提供所有三个属性.
但是,当您将其更改为使用选择器时,情况会有所不同.hex color和drawable都有相应的选择器.选择器的作用类似于您输入的资源,但结果不是原始的.它更像是一个单一用途的包装器.您不能将十六进制颜色提供给需要Drawable的属性.
颜色选择器实际上是一个ColorStateList,提供一个十六进制颜色,驻留在res/color.您只能使用android:color此文件中的属性.如果你写,它会提示错误android:drawable.
drawable选择器是StateListDrawable,提供Drawable,驻留在res/drawable.你应该写android:drawable在这里,但如果你写的话没有错误android:color.
但是android:color只提供一个无法识别为Drawable的十六进制颜色,同时app:itemBackground需要一个Drawable,因此该应用程序注定失败.(直接原因)
属性(android:color和android:drawable)都接受ColorDrawable,这里它就像设置常量颜色一样.
解决方案(和实践)是:
在(和)android:drawable中使用res/drawable/drawable_selector.xml.例:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/colorAccent" android:state_checked="true" />
<item android:drawable="@color/colorAccentDark" />
</selector>
Run Code Online (Sandbox Code Playgroud)使用res/color/color_selector.xml时,它需要一个十六进制颜色(避免混淆).例:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white" android:state_checked="true"/>
<item android:color="@color/colorPrimary" />
</selector>
Run Code Online (Sandbox Code Playgroud)提供app:itemBackgrounddrawable.例:
<android.support.design.widget.BottomNavigationView
...
app:itemBackground="@drawable/drawable_selector"
app:itemIconTint="@color/color_selector"
app:itemTextColor="@color/color_selector"
... />
Run Code Online (Sandbox Code Playgroud)(值得注意的是,如果您使用的是Android Studio,其自动完成功能会告诉您哪些属性合法且可用,并且它不会建议您android:color使用选择器res/drawable!)
| 归档时间: |
|
| 查看次数: |
25323 次 |
| 最近记录: |