我有一个 ImageView,我需要以编程方式将样式应用于此图像,而不是在 xml 中执行此操作
<style name="mainicon">
<item name="android:background">@drawable/icon_background</item>
<item name="android:foregroundTint">@drawable/foreground_selector</item>
...
</style>
val buttonImageView = view.findViewById<ImageView>(R.id.main_button) as ImageView
我的问题是,如何以编程方式将样式应用于此图像视图?
您无法更改创建和附加View
样式。 style只能设置在构造函数中,所以如果你使用XML声明,那么style已经在那里应用了(通过style
属性,不带android:
前缀(
您可以删除当前View
并在同一位置添加新的构造器应用的新样式
new ImageView(context, null, R.style.mainicon);
或使用ContextThemeWrapper
new ImageView(new ContextThemeWrapper(context, R.style.mainicon));
作为一个选项,您还可以在XML中定义两个具有不同样式的ImageView
并切换其Visibility
。 这不是性能的最佳解决方案,因为您将在内存中保留额外的未使用View
,但Visiblity.GONE
它不会被绘制,因此不会占用太多内存,并且切换可见性可能比删除/添加新View
更容易