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.