Operaciones aritméticas en el diseño – vinculación de datos de Android

Estoy tratando de utilizar la operación aritmética en el enlace de datos:

<Space android:layout_width="match_parent" android:layout_height="@{2 * @dimen/button_min_height}" /> 

Desafortunadamente estoy recibiendo:

 Error:(47, 47) must be able to find a common parent for int and float 

¿Algunas ideas?

Debido a que está realizando la operación int * float , 2 es valor int y @dimen/button_min_height le dará el valor de float . Sin embargo, android:layout_height aceptará solo el valor de float .

Puede crear su método de encuadernación personalizado como este:

 public class Bindings { @BindingAdapter("android:layout_height") public static void setLayoutHeight(View view, float height) { ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); layoutParams.height = (int) height; view.setLayoutParams(layoutParams); } } 

Y en su código xml

 android:layout_height="@{(float)2 * @dimen/activity_vertical_margin}" 

Convertir 2 en float para que no le dará ningún error de casting.

Desde el código anterior obtendrá RunTimeException : You must supply a layout_height attribute. , Para resolver ese error, proporcione default valor por default a layout_height

 android:layout_height="@{(float)2 * @dimen/activity_vertical_margin, default=wrap_content}" 

Consulte este documento oficial para default concepto de atributo default , o puede referir esta respuesta también

Debe hacerlo mediante programación. En su archivo xml, añada el atributo android: id a su vista Espacio:

 <Space android:id="@+id/space" android:layout_width="match_parent" android:layout_height="match_parent" /> 

En tu clase Java debes ejecutar esto:

 Space space = findViewById(R.id.space); space.getLayoutParams().height = 2 * getResources().getDimension(R.dimen.button_min_height); space.requestLayout(); 
  • Uso del elemento XML de <merge> de Android en rootview para el diseño de la actividad
  • Match_parent no funciona con CoordinatorLayout
  • Escala widget en Android (dp, px, tamaño de pantalla)
  • Establecer parámetros en las vistas secundarias de un RelativeLayout
  • Problema con actividad cancelada por el sistema si ya no es visible en Android
  • Cómo implementar el ajuste en CollapsingToolbarLayout?
  • Pasando la referencia layout_weight desde las dimensiones (dimens)
  • ¿Cómo crear un cajón deslizante en ambos lados opuestos el uno al otro?
  • ListFragment vs ListActivity - ¿Cuál usar?
  • Cómo obtener las coordenadas de pantalla de la vista InfoWindow de un mapa
  • Error R.id.togglebutton1 y más
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.