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)).