我正在尝试在Xamarin中更改TextView Drawable的颜色。
在Java中,您可以这样做:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView txt = (TextView) findViewById(R.id.my_textview);
setTextViewDrawableColor(txt, R.color.my_color);
}
private void setTextViewDrawableColor(TextView textView, int color) {
for (Drawable drawable : textView.getCompoundDrawables()) {
if (drawable != null) {
drawable.setColorFilter(new PorterDuffColorFilter(getColor(color), PorterDuff.Mode.SRC_IN));
}
}
}
我怎么能在Xamarin.Android中做这样的事情?
9条答案
按热度按时间bybem2ql1#
尝试以下解决方案
jbose2ul2#
我在Kotlin使用这个:
xfb7svmp3#
请注意,如果您在布局文件中通过
android:drawableStart
或android:drawableEnd
(而不是分别通过android:drawableLeft
和android:drawableRight
)设置可绘制对象,则应使用TextView.getCompoundDrawablesRelative()。否则,您可能会得到可绘制对象的空数组。nwnhqdif4#
注意!
如果在XML布局中使用
android:stratDrawable
或android:endDrawable
,则必须使用textView.compoundDrawablesRelative
数组,textView.compoundDrawables
包含添加了android:leftDrawable
或android:rightDrawable
属性可绘制对象。nwsw7zdq5#
我通过在xml定义中添加以下行来解决这个问题:
"@color/red”(颜色/红色)
完整示例:
ylamdve66#
通过
TextViewCompat.setCompoundDrawableTintList(textView, colors)
提供内置支持htzpubme7#
对于
Kotlin
。使用TextView
可绘制对象的以下扩展。它支持低于和高于API级别23。注意:您也可以在
RecyclerView
项目中使用此功能,它不会为每个项目override
相同的颜色s4n0splo8#
如果要更改任何视图的可绘制对象的淡色颜色(在API 29上测试):
hvvq6cgz9#
我面临的问题是,我正在改变的颜色复合可绘制和除了一个其余的所有颜色是不变的。困惑我。!!!
对我有效的解决方案是
没有
mutate()
,事情是部分工作。我在这里得到了更多的细节可绘制的突变。为了读者的兴趣,我在下面提供一个快速的总结。
Android Drawables是绘图容器,如BitmapDrawable用于显示图像,ShapeDrawable用于显示形状和渐变。
Drawables are used extensively in the Android ecosystem thus they are optimized. So when views are created the different instances are spawned but the drawables associated with the view share the common state, called "Constant state".
例如,如果可绘制对象是BitmapDrawable,则相同的位图将用于所有相应的副本或视图。
优点:它只是节省了大量的内存。