Android: 以编程方式设置 ImageView 样式
Android: Programmatically set ImageView style
我有一个 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
。样式只能在构造函数中设置,所以如果您使用 XML 声明,那么样式已经应用到那里(通过 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
它不会被绘制,因此不会占用太多内存,它可能是比 removing/adding new View
s
更容易切换可见性
我有一个 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
。样式只能在构造函数中设置,所以如果您使用 XML 声明,那么样式已经应用到那里(通过 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
它不会被绘制,因此不会占用太多内存,它可能是比 removing/adding new View
s