首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:如何更改android:在一个矢量可绘制xml中使用选择器填充颜色

Android:如何更改android:在一个矢量可绘制xml中使用选择器填充颜色
EN

Stack Overflow用户
提问于 2017-05-08 20:02:37
回答 3查看 7.1K关注 0票数 9

Tab图标:我目前的方法是创建两个文件(ic_list_selected_24dp.xml和ic_list_unselected_24dp.xml,它们基本上是相同的,只是android:fillColor='Color HEX CODE'不同),然后创建一个选择器(selector_tabitem_list.xml)来在状态改变时改变可绘制的颜色。

代码语言:javascript
复制
// @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>

它有点重复,因为两个可绘制的东西是一样的。

选择器不能在矢量绘制中使用。

代码语言:javascript
复制
<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>

--

代码语言:javascript
复制
// @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"也一样。

代码语言:javascript
复制
// @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>

有没有办法使用一个可绘制的,并动态改变它的颜色?使用硬十六进制代码更好吗?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2018-04-02 07:24:18

下面是在TabItem (支持设计库的一部分)中使用矢量资源作为有色图标的完整步骤列表。所有部分都存在于原始问题和关联答案中,但很容易遗漏。

  1. 创建选择器。注意,它必须切换state_selected的颜色(包括在问题中,但不是在@cmingmai链接的答案中。它只说明了与选项卡无关的android:state_enabled ):

res/color/selector_navigation.xml:

代码语言:javascript
复制
<?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>

  1. 通过向向量标签添加android:tintModeandroid:tint来调整可绘制的向量。此外,为了使着色与倍增一起使用,还需要将路径的fillColor设置为white!

res/drawable/ic_tab_list:

代码语言:javascript
复制
<?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>

  1. 在布局中使用可绘制的矢量-或者使用在代码中创建标签,如developer guide on Tabs中所示。请注意,我还修改了选项卡指示器颜色,使其与活动图标颜色相匹配,以遵循material design guidelines.

布局的相关部分:

代码语言:javascript
复制
<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>

  1. 通过以下方式调整build.gradle,以激活对旧安卓版本的矢量支持(以防之前未添加):

android { defaultConfig { vectorDrawables.useSupportLibrary = true } }

票数 16
EN

Stack Overflow用户

发布于 2018-12-02 06:54:37

升级以支持库28.0.0+ (假设androidx也是如此。没有测试)。

在Support Library 28.0.0中,当用作矢量的android:fillColor时,使用选择器的color xml资源现在似乎可以工作了。

事实上,以前的解决方案(使用向量的android:tintModeandroid:tintandroid:fillColor的白色)在我的支持库28.0.0上不再有效。

已在API 21和27 Emulator上测试。

票数 0
EN

Stack Overflow用户

发布于 2019-01-20 12:41:02

尝试将style.xml中的AppTheme替换为不同的父级,如下所示:

样式name="AppTheme“parent="Theme.MaterialComponents.Light.DarkActionBar”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43847170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档