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:
- ListView Item Selected Estado no funciona
- Android ViewPager: fragmentos superpuestos cuando el ancho de página se establece en 90%
- ¿Por qué el margen no funciona?
- Combine el título personalizado con FEATURE_PROGRESS
- Cómo hacer espacio entre spannable cadena en Android?
Error:(47, 47) must be able to find a common parent for int and float
¿Algunas ideas?
- El texto de la marquesina no funciona en el widget
- Detección de la posición del pulgar en SeekBar antes de la versión 16 de la API
- Android: No se puede obtener la transición de elementos compartidos para trabajar con Google Maps Fragment
- Obstáculos extraños al hacer que los botones parezcan Spinners en API 21
- Fugas de memoria con una fuente personalizada para establecer la fuente personalizada
- Cambiar el tamaño de fuente de un elemento textview en android
- SearchView y título de la actividad en ActionBar
- TableRow no envuelve TextView
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();