Android databinding – Как получить размеры из dimens.xml

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

<TextView android:id="@+id/title_main" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_below="@+id/disableButton" ************* android:layout_marginBottom="@{@bool/showAds ? @dimen/frontpage_margin_ads: @dimen/frontpage_margin_noads}" ************* android:gravity="center_horizontal" android:text="@string/app_name" android:textColor="@android:color/holo_orange_dark" android:contentDescription="@string/app_name" android:textSize="64sp" android:textStyle="bold" /> 

Он нашел это, но он говорит, что marginbottom не может принимать тип float. Как я могу это исправить? Я попробовал кастинг как dimens, так и int, но потом он жалуется, что его нельзя отличить от int.

Мой размер xml-файла выглядит так:

  <resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> <dimen name="bigText">44sp</dimen> <dimen name="littleText">44sp</dimen> <dimen name="mediumText">40sp</dimen> <dimen name="smallText">24sp</dimen> <dimen name="fab_margin">16dp</dimen> <dimen name="frontpage_margin_noads">0dp</dimen> <dimen name="frontpage_margin_ads">13dp</dimen> </resources> 

Solutions Collecting From Web of "Android databinding – Как получить размеры из dimens.xml"

Проблема здесь не в размерах, а в android:layout_marginBottom . Для любых атрибутов LayoutParams нет встроенной поддержки. Это было сделано для удаления «ногой», который многие могли бы использовать для привязки переменных к LayoutParams и, возможно, попытаться использовать привязку данных для анимирования своих позиций таким образом.

Связывание данных идеально подходит для использования в вашем примере, и вы можете легко добавить свои собственные. Это было бы так.

 @BindingAdapter("android:layout_marginBottom") public static void setBottomMargin(View view, float bottomMargin) { MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams(); layoutParams.setMargins(layoutParams.leftMargin, layoutParams.topMargin, layoutParams.rightMargin, Math.round(bottomMargin)); view.setLayoutParams(layoutParams); } 

Вы, конечно, также добавили бы левый, верхний, правый, начальный и конечный BindingAdapters .