Tab图标:我目前的方法是创建两个文件(ic_list_selected_24dp.xml和ic_list_unselected_24dp.xml,它们基本上是相同的,只是android:fillColor='Color HEX CODE'不同),然后创建一个选择器(selector_tabitem_list.xml)来在状态改变时改变可绘制的颜色。
// @drawable/selector_tabitem_list.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:drawable="@drawable/ic_list_selected_24dp"
android:state_selected="true" />
<item android:drawable="@drawable/ic_list_unselected_24dp"
android:state_selected="false" />
</selector>它有点重复,因为两个可绘制的东西是一样的。
选择器不能在矢量绘制中使用。
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@drawable/selector"
android:pathData="M19,3...."
</vector>--
// @drawable/selector
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<color android:color="@color/itemSelected" />
</item>
<item android:state_selected="false">
<color android:color="@color/itemUnselected" />
</item>
</selector>,和android:fillColor="@color/state"也一样。
// @color/state
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white" android:state_selected="true" />
<item android:color="@android:color/black" android:state_selected="false" />
</selector>有没有办法使用一个可绘制的,并动态改变它的颜色?使用硬十六进制代码更好吗?
谢谢。
发布于 2018-04-02 07:24:18
下面是在TabItem (支持设计库的一部分)中使用矢量资源作为有色图标的完整步骤列表。所有部分都存在于原始问题和关联答案中,但很容易遗漏。
state_selected的颜色(包括在问题中,但不是在@cmingmai链接的答案中。它只说明了与选项卡无关的android:state_enabled ):res/color/selector_navigation.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:color="@android:color/black" />
<item android:state_selected="true" android:color="@android:color/white" />
</selector>android:tintMode和android:tint来调整可绘制的向量。此外,为了使着色与倍增一起使用,还需要将路径的fillColor设置为white!res/drawable/ic_tab_list:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0"
android:tintMode="multiply"
android:tint="@color/selector_navigation">
<path
android:fillColor="@android:color/white"
android:pathData="..." />
</vector>布局的相关部分:
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorColor="@android:color/white">
<android.support.design.widget.TabItem
android:id="@+id/tabItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_tab_list" />
<!-- More Tabs -->
</android.support.design.widget.TabLayout>android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
发布于 2018-12-02 06:54:37
升级以支持库28.0.0+ (假设androidx也是如此。没有测试)。
在Support Library 28.0.0中,当用作矢量的android:fillColor时,使用选择器的color xml资源现在似乎可以工作了。
事实上,以前的解决方案(使用向量的android:tintMode、android:tint和android:fillColor的白色)在我的支持库28.0.0上不再有效。
已在API 21和27 Emulator上测试。
发布于 2019-01-20 12:41:02
尝试将style.xml中的AppTheme替换为不同的父级,如下所示:
样式name="AppTheme“parent="Theme.MaterialComponents.Light.DarkActionBar”
https://stackoverflow.com/questions/43847170
复制相似问题