¿Por qué usamos setLayoutParams?

Por ejemplo, si desea cambiar LayoutParams de alguna vista a WRAP_CONTENT para el width y la height programmaticaly, se verá algo así:

  final ViewGroup.LayoutParams lp = yourView.getLayoutParams(); lp.height = ViewGroup.LayoutParams.WRAP_CONTENT; lp.width = ViewGroup.LayoutParams.WRAP_CONTENT; 

Como i undestood getLayoutParams devuelve la referencia para los parámetros, por lo que este código sería suficiente, pero a menudo veo en los ejemplos y así sucesivamente que después de estas líneas, uno sigue:

  yourView.setLayoutParams(lp); 

Y me pregunto cuál es el punto de esta línea. ¿Esto es sólo por el bien de la mejor legibilidad del código o hay casos en que no funcionará sin él?

3 Solutions collect form web for “¿Por qué usamos setLayoutParams?”

setLayoutParams() también activará resolveLayoutParams() y requestLayout() , lo que notificará a la vista que algo ha cambiado, actualiza. O no podemos garantizar que los nuevos parámetros de diseño funcionen realmente.


Vea View.setLayoutParams fuentes código:

 public void setLayoutParams(ViewGroup.LayoutParams params) { if (params == null) { throw new NullPointerException("Layout parameters cannot be null"); } mLayoutParams = params; resolveLayoutParams(); if (mParent instanceof ViewGroup) { ((ViewGroup) mParent).onSetLayoutParams(this, params); } requestLayout(); } 

No hay forma de garantizar que cualquier cambio que realice en LayoutParams devuelto por getLayoutParams() se refleje correctamente. Se puede variar según la versión de Android. Por lo tanto, debe llamar a setLayoutParams() para asegurarse de que la vista actualizará esos cambios.

Si no utiliza setLayoutParams (), su configuración de diseño sería efectiva mientras se llamara View.onLayout () .

Aquí está el código fuente de View.setLayoutParams ()

public void setLayoutParams(ViewGroup.LayoutParams params) { if (params == null) { throw new NullPointerException("Layout parameters cannot be null"); } mLayoutParams = params; resolveLayoutParams(); if (mParent instanceof ViewGroup) { ((ViewGroup) mParent).onSetLayoutParams(this, params); } requestLayout(); }

Como se ve, el requestLayout sería llamado en el setLayoutParams. Esta visión sería relayout otra vez inmediatamente. El onLayout también sería llamado.

  • Superponer una capa Transparente de pantalla completa en Android 4.4 (KitKat)
  • Añadir diseño con parámetros programáticamente Android
  • Restablecer LayoutParams a lo que se define en XML
  • Cómo establecer mediante programación el atributo layout_align_parent_right de un botón en Disposición relativa?
  • Establecer margen en RecyclerView mediante programación
  • Superposición de la barra de navegación de Android
  • Cómo obtener el ancho y la altura de la imagen mostrada en android?
  • Añadir un margen a LinearLayout en Android
  • Cómo obtener la altura en píxeles de LinearLayout con layout_weight
  • Combinación WindowManager.LayoutParams que puede pasar eventos a capas bajo TYPE_SYSTEM_ALERT o smilar
  • Expectativa de puntero nulo al configurar LayoutParams
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.