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

  • ¿Cómo configurar layout_alignParentRight = "false" mediante programación?
  • Configuración del margen del botón mediante programación
  • Restablecer LayoutParams a lo que se define en XML
  • El método setLayoutParams () no funciona
  • android setLayoutParams para webview genera ERROR
  • Animación en el cambio de LayoutParams en LinearLayout
  • Android - vista de la imagen dentro de los problemas del paginador de vista
  • ¿Cómo puedo eliminar mediante programación una regla existente que se definió en XML?
  • cómo establecer el relleno o el margen a la disposición lineal?
  • Creación de una vista redimensionable ListAdapter-recycleable
  • Tostada personalizada en la parte superior de la pantalla
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.