Ширина привязки данных Android с троичным с использованием dp в XML

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

В моем XML для элемента lineralayout:

android:layout_width="@{DataBoundData.dis.equals(IN_PROGRESS) ? 60dp : 
     (DataBoundData.dis.equals(POSTED) ? 60dp : 0dp)}"

Это показывает ошибку на "р" в 60dp. Я пробовал 60d\p 60dp и несколько других и ничего не работает

1 ответ

Решение

Чтобы ответить на вопрос, почему android:layout_width="@{60dp}" не работает, это потому, что привязка данных не понимает концепцию "dp".

Вы уже создали какой-то BindingAdapter для атрибута, иначе он не будет работать вообще, потому что layout_width не поддерживается по умолчанию. Может быть, у вас есть что-то вроде этого:

@BindingAdapter("android:layout_width")
public static void setLayoutWidth(View view, float width) {
    LayoutParams layoutParams = view.getLayoutParams();
    layoutParams.width = (int)width;
    view.setLayoutParams(layoutParams);
}

На BindingAdapter нет указаний на то, что float width является. У него нет типа, поэтому нет возможности передать эти знания константам в системе привязки данных. Это та же самая причина, по которой вы должны использовать

android:visibility="@{View.INVISIBLE}"

вместо

android:visibility="@{invisible}"

Там нет константы Java invisible в контексте установки значения INT на setVisibility()

Вы можете передать целочисленную константу как 60 и это назначит это. К сожалению, это пиксели для LayoutParams, которые меняются между устройствами.

Когда вы используете @dimen/someDimensionПривязка данных преобразует измерение в число с плавающей точкой во время извлечения значения из ресурсов. Это легко понять, потому что Resources.getDimension() возвращает float, Точно так же, Resources.getColor() возвращает целое число, поэтому каждый раз, когда вы передаете цветовой ресурс, вы передаете целое число.

Надеюсь, это поможет.

Другие вопросы по тегам