PDA

Ver la Versión Completa : Como poner filas y columnas en un LinearLayout dinamicamente?


manolazo
19/06/13, 18:55:31
Buenas.

Tengo quiero crear dinamicamente este xml :




<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="2"
android:rowCount="2"
android:orientation="vertical" >

<LinearLayout
android:id="@+id/topleft"
android:layout_width="160dp"
android:layout_height="200dp"
android:layout_column="0"
android:layout_row="0"
>

<ImageView
android:id="@+id/myimage1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tetona"
android:visibility="visible"
/>

<ImageView
android:id="@+id/myimage11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tocho"
android:visibility="gone"
/>
></LinearLayout>

<LinearLayout
android:id="@+id/topRigth"
android:layout_width="160dp"
android:layout_height="200dp"
android:layout_column="1"
android:layout_row="0"
>
<ImageView
android:id="@+id/myimage2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tetona" />
></LinearLayout>

<LinearLayout
android:id="@+id/bottomRight"
android:layout_width="160dp"
android:layout_height="200dp"
android:layout_column="1"
android:layout_row="1"
>
<ImageView
android:id="@+id/myimage3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tetona" />
></LinearLayout>

<LinearLayout
android:id="@+id/BottonLeft"
android:layout_width="160dp"
android:layout_height="200dp"
android:layout_column="0"
android:layout_row="1"
>
<ImageView
android:id="@+id/myimage4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tetona" />
></LinearLayout>

</GridLayout>


Se pueden crear los LinearLayout dentro de un bucle:

LinearLayout layout = new LinearLayout(this);
layout.setId(id);
layout.setLayoutParams(new LinearLayout.LayoutParams(160,200));
gridlay.addView(layout);

Pero como pongo los parametros del LinearLayout android:layout_column y android:layout_row de forma dinamica??

mocelet
19/06/13, 19:10:20
Pues en vez de un LinearLayout.LayoutParams, lo que tienes que meterle es un GridLayout.LayoutParams, pues son atributos del GridLayout realmente.

manolazo
19/06/13, 22:00:43
Hola.
En la linea: layout.setLayoutParams(new LinearLayout.LayoutParams(160,200)); lo que hago es poner poner la anchura y altura del LinearLayout que esta dentro del GridLayout.

Si el GridLayout tiene dos filas y dos columnas: android:columnCount="2" android:rowCount="2"
quiero definir en el LinearLayout los parametros por corresponden a la fila 1 y la columna 1,
es decir android:layout_column="1" android:layout_row="1"

Pero como lo pongo dinamicamente?

manolazo
20/06/13, 18:11:36
Pues en vez de un LinearLayout.LayoutParams, lo que tienes que meterle es un GridLayout.LayoutParams, pues son atributos del GridLayout realmente.

HOla, pero como indicas la posicion "i" y "j" de la fila y columna que quiero poner relativa al gridlayout? No veo como hacerlo como dices.


GridLayout gridlay = (GridLayout)findViewById(R.id.gridpadre);
gridlay.setColumnCount(2);
gridlay.setRowCount(2);

for (int i=0; i<(gridlay.getRowCount()); ++i){
for(int j=0; j<gridlay.getColumnCount(); ++j){

LinearLayout layout = new LinearLayout(this);
layout.setId(id);
layout.setLayoutParams(new LinearLayout.LayoutParams(160,200));
gridlay.addView(layout);

como poner dinamicamente android:layout_column="i" and android:layout_row="j" ???

Es posible o hay que usar otros recursos?

mocelet
20/06/13, 22:06:22
Pues algo así, ¿no?

layout.setLayoutParams(new GridLayout.LayoutParams(fila, columna));

manolazo
20/06/13, 22:13:53
Hola.

Los parametros referentes a row y columns solo pueden ser del tipo:
layout.setLayoutParams(new GridLayout.LayoutParams(Spec rowSpec ,Spec columnspec));
es decir solo se refieren a las especificaciones de la fila y columna , no permite valores int referentes a la posicion respecto al gridlayout.

Todo lo que se escribe en el xml SE PUEDE HACER DINAMICAMENTE ? o hay casos que no es posible como este?

mocelet
20/06/13, 22:16:11
En efecto te estoy liando, disculpa XD No sé qué es lo que he visto entonces

Algo así te valdría

GridLayout.LayoutParams param =new GridLayout.LayoutParams();
param.columnSpec = GridLayout.spec(columna);
param.rowSpec = GridLayout.spec(fila);


Fuente: http://stackoverflow.com/questions/13532084/set-rowspan-or-colspan-of-a-child-of-a-gridlayout-programmatically

manolazo
21/06/13, 02:18:08
Hola.
El otro dia vi el mismo mensaje en StackOverflow pero como hablaban de rowspan y columnSpan que no tiene nada que ver con lo que yo preguntaba no me fije en el código que pusieron en medio que clarifica la duda que tenia.

Lo he probado y funciona. Un saludo.

pabl3st
05/07/13, 22:34:04
Un poco de offtopic....
Podrias subir el drawable ese "tetona" jajaja pa q lo veamos todos si es lo q parece q es :D:D:D

mocelet
05/07/13, 22:35:38
Un poco de offtopic....
Podrias subir el drawable ese "tetona" jajaja pa q lo veamos todos si es lo q parece q es :D:D:D

El drawable "tocho" no hace falta eh... xDDD