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 Views

更容易切换可见性