首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在xml选择器中更改可绘制的色调

在xml选择器中更改可绘制的色调
EN

Stack Overflow用户
提问于 2012-02-28 05:49:35
回答 3查看 28.5K关注 0票数 26

我有一个用xml定义的背景按钮。我想根据按钮的当前状态对其进行着色,即按下、聚焦、正常。

下面是我的xml文件。另外,我的colored_tint_darkcolored_tint都是半透明的颜色,我试图将它们绘制在我从资源文件夹调用的可绘制图像上。这是问题所在。当UI第一次加载时,图像上有适当的色调,但按下后,按下状态不会显示任何色调,然后正常状态将不会显示任何色调。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>

代码语言:javascript
复制
<item android:state_pressed="true" android:drawable="@drawable/rounded_grayscale_pinstripe_button">
    <shape>
        <gradient
            android:endColor="@color/colored_tint"
            android:startColor="@color/colored_tint"
            android:angle="270" />
        <stroke
            android:width="0dp"
            android:color="@color/colored_tint" />
        <corners
            android:radius="0dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>

<item android:state_focused="true" android:drawable="@drawable/rounded_grayscale_pinstripe_button">
    <shape>
        <gradient
            android:endColor="@color/colored_tint"
            android:startColor="@color/colored_tint"
            android:angle="270" />
        <stroke
            android:width="0dp"
            android:color="@color/colored_tint" />
        <corners
            android:radius="0dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>

<item android:drawable="@drawable/rounded_grayscale_pinstripe_button">        
    <shape>
        <gradient
            android:endColor="@color/colored_tint_dark"
            android:startColor="@color/colored_tint_dark"
            android:angle="270" />
        <stroke
            android:width="0dp"
            android:color="@color/colored_tint_dark" />
        <corners
            android:radius="0dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>

我知道在java中有解决方案,但我特别在寻找xml中的解决方案。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2016-03-17 18:15:37

创建选择器tint_menu_item.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/white" android:state_pressed="true" />
    <item android:color="@color/white" android:state_activated="true" />
    <item android:color="@color/green" />
</selector>

(在我的示例中,选中图像时为白色,未选中时为绿色)

然后,在您的xml中,您可以向ImageView添加染色属性:

代码语言:javascript
复制
<ImageView
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:tint="@color/tint_menu_item"
    android:src="@drawable/ic_menu_home" />

您还可以通过textColor属性在TextView上使用此选择器:

代码语言:javascript
复制
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@color/tint_menu_item" />
票数 31
EN

Stack Overflow用户

发布于 2012-08-30 19:08:06

你试过selector吗?

您可以在HERE中找到一些示例

票数 1
EN

Stack Overflow用户

发布于 2020-05-17 18:59:29

假设您有一个appCpmpatImageView,并将此**app**:tint="@drawable/custom_tint"添加到compat图像视图中,您的自定义色调选择器如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/grey" android:state_pressed="true" />
    <item android:color="@color/silver" android:state_focused="true" />
    <!-- default tint -->
    <item android:color="@color/white" />
</selector>

因此,您的appCompat ImageView将在不同情况下使用每种颜色作为色调。

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

https://stackoverflow.com/questions/9472842

复制
相关文章

相似问题

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