Динамический src для тега ‹bitmap› в Android xml

Вопрос. Есть ли способ динамически установить атрибут "src" в "растровом изображении" XML в XML-файле Android?

У меня есть настраиваемый XML-файл с именем «repeat_background.xml», определенный как таковой:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/background"
    android:tileMode="repeat" />

Я использую этот рисунок, чтобы «плитить» 1x1 jpg (с именем background.jpg) в качестве фона для всех страниц в моем приложении, и он отлично работает — вот пример установки его в качестве фона LinearLayout

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:background="@drawable/repeat_background">

Однако я хочу, чтобы фактический jpg (в данном случае «background.jpg» из @drawable/background) основывался на предпочтениях пользователя, поэтому у меня будет список, который позволит пользователю выбрать красный, синий, оранжевый и т. д. , так что пользователь может переопределить цвет фона, показанный в приложении, и у меня будет 1x1 jpg, соответствующий каждому доступному цвету в моем наборе ресурсов, но как мне показать предпочтительный jpg в качестве фона?

Я не хочу вручную вызывать некоторый код в каждом фрагменте или действии, я хочу что-то, что будет уважать предпочтения пользователя и реагировать соответствующим образом.

Я пытался расширить класс BitmapDrawable, но не очень далеко. Любые предложения о том, как я могу это сделать, очень ценятся.


person DiscDev    schedule 09.07.2015    source источник


Ответы (1)


Вы можете сделать это в коде Java, используя setBackgroundDrawable(new ColorDrawable(color)). Это невозможно сделать в xml.

person Gabe Sechan    schedule 09.07.2015
comment
Можете ли вы найти источник для этого @Gabe Seechan? Я использую это на более чем 100 xml-страницах и стараюсь не вызывать метод в каждом из действий или фрагментов. - person DiscDev; 09.07.2015
comment
Ну, во-первых, система синтаксического анализа xml не знает, что такое общие предпочтения. Между ними нет никакой связи. - person Gabe Sechan; 09.07.2015
comment
Правильно - я надеялся, что есть какой-то трюк, который я мог бы использовать, используя собственный класс View, который расширяет BitmapDrawable и проверяет там магические настройки, а затем устанавливает определенный jpg в качестве src в зависимости от предпочтений? - person DiscDev; 09.07.2015
comment
Если вы готовы перейти на этот уровень - хорошо. Вы можете создать новый класс, производный от линейного макета, и переопределить все 3 его конструктора, чтобы переопределить фон после вызова super. Но затем в любое время, когда вы захотите использовать этот цвет фона, вам придется использовать этот класс вместо линейного макета и изменить для этого ВЕСЬ ваш xml. А затем сделайте то же самое для относительной компоновки, если необходимо, и FrameLayout, если необходимо. И, возможно, ListView, если это необходимо. Вы смотрите на много работы в любом случае. - person Gabe Sechan; 09.07.2015
comment
Ой. В iOS я закончил тем, что создал подкласс UIViewController и в основном сделал то, что вы предложили сделать с подклассом LinearLayout... часть проблемы в том, что я хочу создать тему больше, чем просто LinearLayouts - кнопки и т. д., поэтому я надеялся сделать многоразовый интеллектуальный виджет растрового изображения с XML, чтобы мое текущее решение работало с очень небольшой модификацией ... облом, что это невозможно таким образом. - person DiscDev; 09.07.2015