我有一堆与此类似的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中的颜色。我不想以编程方式完成它。
答案 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));