Android databinding – Cómo obtener dimensiones desde dimens.xml

Quiero establecer márgenes basados ​​en las dimensiones que he creado en dimens.xml Las dimensiones que se trabaja bien, su vinculación de datos sólo se puede encontrar en el caso a continuación:

<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" /> 

Lo encontró, pero dice que marginbottom no puede tomar tipo float. ¿Cómo puedo arreglar esto? Traté de lanzar ambas dimensiones a int pero luego se queja de que no se puede lanzar a int.

Mi archivo xml de dimensiones tiene este aspecto:

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

El problema aquí no es con dimensiones, sino con android:layout_marginBottom . No hay soporte incorporado para los atributos de LayoutParams . Esto se hizo para quitar el "arma de pie" que muchos podrían utilizar para vincular variables a LayoutParams y tal vez tratar de utilizar la vinculación de datos para animar sus posiciones de esta manera.

La encuadernación de datos es perfecta para ser usada en su ejemplo y usted puede agregar fácilmente la suya propia. Sería algo así.

 @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); } 

Usted, por supuesto, también agregará a la izquierda, superior, derecha, inicio y final BindingAdapters también.

  • ¿Cómo enlazar DataBinding de Android a Menú?
  • Kotlin y conexión de datos de Android
  • No se puede encontrar el GETTER para el atributo 'app: vm' con el tipo de valor Boolean
  • ¿Cómo usar com.android.databinding en el módulo (estudio de Android)?
  • Obtener una clase vinculante desde vista
  • Android dataBinding - @BindingAdapter nombre de la aplicación personalizada que se ignora
  • Conexión de datos de Android con menús
  • La vinculación de datos de Android hace que la aplicación se bloquee cuando se utiliza una etiqueta de inclusión en un grupo de usuarios no root
  • Android: la etiqueta de vista no es correcta en la vista: null (CursorAdapter y DataBinding)
  • Cómo vincular el diseño con varios calificadores
  • Android - DataBinding - ¿Cómo y cuándo se generarán las clases de enlace?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.