Android: программно установить стиль ImageView. - PullRequest
0 голосов
/ 17 июня 2020

У меня есть 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

Мой вопрос в том, как я могу программно применить стиль к этому изображению ?

1 Ответ

2 голосов
/ 17 июня 2020

нельзя изменить стиль созданного и прикрепленного View. стиль может быть установлен только в конструкторе, поэтому, если вы используете объявление XML, тогда стиль уже применяется там (по атрибуту style, без префикса android:)

вы можете удалить текущий View и добавьте новый в том же месте с новым стилем, примененным конструктором

new ImageView(context, null, R.style.mainicon);

или используя ContextThemeWrapper

new ImageView(new ContextThemeWrapper(context, R.style.mainicon));

в качестве опции, которую вы также можете определить в XML два ImageView s с разными стилями и переключением их Visibility. это не лучшее решение для производительности, так как вы будете хранить в памяти дополнительные, неиспользуемые View, но с Visiblity.GONE они не будут отображаться, поэтому не займет много памяти, и может быть проще переключить видимость вместо удаления / добавления нового View s

...