una tutorial studio programar programacion móviles español desde desarrollo curso crear como cero app aplicaciones android android-layout layoutparams

tutorial - Configuración de parámetros de diseño en android



programacion android pdf 2018 (2)

Todas las clases de diseño ( LinearLayout , RelativeLayout , etc.) amplían ViewGroup .

La clase ViewGroup tiene dos clases internas estáticas: LayoutParams y MarginLayoutParams . Y ViewGroup.MarginLayoutParams realidad extiende ViewGroup.LayoutParams .

En ocasiones, las clases de diseño necesitan información de diseño adicional para asociar con la vista secundaria. Para esto definen su clase LayoutParams estática interna. Por ejemplo, LinearLayout tiene:

public class LinearLayout extends ViewGroup { ... public static class LayoutParams extends ViewGroup.MarginLayoutParams { ... } }

Lo mismo para RelativeLayout :

public class RelativeLayout extends ViewGroup { ... public static class LayoutParams extends ViewGroup.MarginLayoutParams { ... } }

Pero LinearLayout.LayoutParams y RelativeLayout.LayoutParams son clases independientes completamente diferentes. Almacenan información adicional diferente sobre vistas de niños.

Por ejemplo, LinearLayout.LayoutParams puede asociar weight valor de weight con cada vista, mientras que RelativeLayout.LayoutParams no puede. Lo mismo con RelativeLayout.LayoutParams : puede asociar valores como above , below , alightWithParent con cada vista. Y LinearLayout.LayoutParams simplemente no tiene esta capacidad.

Por lo tanto, en general, debe usar LayoutParams para LayoutParams diseño y hacer que su vista esté correctamente posicionada y renderizada. Pero tenga en cuenta que todos los LayoutParams tienen la misma clase parental ViewGroup.LayoutParams . Y si solo usa la funcionalidad que está definida en esa clase (como en su caso WRAP_CONTENT y FILL_PARENT ) puede obtener código de trabajo, aunque se LayoutParams clase de LayoutParams incorrecta para especificar parámetros de diseño.

Trabajar con el archivo XML fue fácil ya que pude especificar los parámetros como

<android:layout_width="fill_parent" android:layout_height="wrap_content">

Pero estoy confundido mientras lo especifico a través del código. Para cada vista, especifico los parámetros usando

view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT));

Veo que tengo la opción de especificarlo como diseño relativo, diseño de marco, etc. Por el momento, estoy usando el diseño lineal para todas las vistas, como imágenes, texto y también gridview. ¿Deben definirse los parámetros de vista en función del diseño del elemento principal? ¿O está bien especificarlo como un diseño lineal, incluso si la vista es hija de, digamos, un framelayout? Lo siento, pero no pude descubrir la diferencia.


Según la cantidad de vistas en las que desee cambiar los diseños, creo que es mejor crear un método auxiliar y pasar las vistas que desee cambiar al método junto con los valores de alto y ancho que desea que cambien:

public void setWidthHeight(View v, int width, int height){ LayoutParams lp; lp = v.getLayoutParams(); lp.width = width; lp.height = height; v.setLayoutParams(lp); }

Recuerde que configurar el ancho y alto aquí no coincidirá con los mismos valores en su xml, es decir, android: layout_width = "32dp" no es lo mismo que lp.width = 32;

Además, la variable de tipo LayoutParams llamada lp debe ser del tipo devuelto por su vista ... Compruebe qué tipo devuelve la vista e importe ese tipo en sus instrucciones de importación.