Android: присвоение константного значения xml-элементу
В настоящее время я программирую приложение для Android. Там я застрял в xml-макете.
Можно ли присвоить значение тэгу xml с использованием переменной (константы), определенной в классе?
У меня есть класс под названием Constants.java для всех моих программных констант. Я делаю это для лучшей ремонтопригодности.
теперь я хотел бы использовать одну из этих констант, например. VAL, как определено ниже как значение для ui-widged.
public class Constants {
public static final int VAL = 10;
...
}
в моем случае виджет - это индикатор прогресса (горизонтальный стиль), и я бы хотел определить значение "android: max".
обычно можно написать:
android:max="10"
android:max="@Integer/val
но я хотел бы использовать значение, определенное в моем классе Constants, например:
android:max="Constants.VAL"
есть ли решение для этого?
спасибо
Ответы
Ответ 1
Нет, вы не можете. Константные значения в классах доступны только во время выполнения, а файлы XML скомпилируются и создаются до выполнения.
Следующее, что нужно сделать, это объявить константы XML, которые вы хотите использовать в res/values/integers.xml
. Вот пример файла integers.xml
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="max">10</integer>
</resources>
чтобы использовать это значение в вашем XML, сделайте следующее:
<YourComponent
android:yourattr="@integer/max"/>
Ответ 2
Ваш вопрос не очень ясен, что вы хотите с этим сделать?
Если вы хотите использовать постоянное значение, просто создайте ui-widgets с константами и просто игнорируйте xml.
Ответ 3
Возможно использование привязка данных.
Класс должен выглядеть примерно так:
class Constants extends BaseObservable {
private static final int MY_INT = 10;
@Bindable
public int getMyInt() {
return MY_INT;
}
}
и xml:
<layout
...
>
<data>
<variable
name="constants"
type="your.package.Constants" />
</data>
...
<YourComponent
android:max='@{constamts.myInt}'
...
</layout>
- Не забудьте установить сам привязку (
binding.setConstants(constants)
).