如何在Android中用XML定义的形状外部设置颜色?

时间:2016-03-08 01:31:03

标签: android xml

我有一堆与此类似的drawable(图标)(来自Google的开源素材图标):

<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="#FF000000"
        android:pathData="M20,4H4c-1.11,0 -1.99,0.89 -1.99,2L2,18c0,1.11 0.89,2 2,2h16c1.11,0 2,-0.89 2,-2V6c0,-1.11 -0.89,-2 -2,-2zm0,14H4v-6h16v6zm0,-10H4V6h16v2z"/>
</vector>

我需要通过造型来改变颜色。它在代码中使用如下:

            <ImageView
                android:layout_gravity="center"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:layout_weight="1"
                android:contentDescription="@string/cd.icon_amount"
                android:src="@drawable/ic_local_atm_24dp"/>

但是如何通过外部样式文件更改ImageView中的颜色?

例如,如何应用以下XML代码段?

<style name="icon">
    <item name="color">@color/grey</item>
</style>

更新1:我想通过外部文件中的样式部分而不是形状文件来更改XML中的颜色。我不想以编程方式完成它。

2 个答案:

答案 0 :(得分:0)

此答案来自here

ImageView b = new ImageView(new ContextThemeWrapper(this, R.style.ButtonText), null, 0);

使用ContextThemeWrapper

使用3参数构造函数(没有这个就没有工作)

答案 1 :(得分:0)

如果您想以编程方式执行此操作,可以执行以下操作:

首先在您的ImageView中添加ID,如下所示:

 <ImageView
            android:layout_gravity="center"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:id="@+id/ivTest"
            android:contentDescription="@string/cd.icon_amount"
            android:src="@drawable/ic_local_atm_24dp"/>

然后按照以下步骤操作:

ImageView iv = (ImageView)findViewById(R.id.ivTest);
GradientDrawable bgShape = (GradientDrawable)iv.getDrawable();
bgShape.setColor(ContextCompat.getColor(this, R.color.color));