Cómo envolver los botones de imagen en un diseño lineal horizontal?

¿Hay alguna manera de envolver los botones de imagen en la disposición lineal horizontal? ¿O hay alguna otra manera de hacer lo siguiente?

Tengo seis botones de imagen. Supongamos que estos botones aparecen en un dispositivo de resolución media como este:

Image button 1 | Image button 2 | Image button 3 | (1st row) Image button 4 | Image button 5 | Image button 6 | (2nd row) 

Quiero que estos botones aparezcan en una tableta o cualquier dispositivo de alta resolución como este:

 Image button 1 | Image button 2 | Image button 3 | Image button 4 | (1st row) Image button 5 | Image button 6 | (2nd row) 

O como esto:

 Image button 1 | Image button 2 | Image button 3 | Image button 4 | Image button 5 | Image button 6 | 

Según las pantallas del dispositivo. Por favor ayuda.

Aquí está mi archivo xml principal:

 <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@layout/back2"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@layout/back2"> <TextView android:layout_width="fill_parent" android:layout_height="50dp" android:background="@layout/button5" android:gravity="center" android:orientation="vertical" android:text="@string/hello" android:textColor="#D5D5D5" android:textSize="20sp" /> <com.google.ads.AdView android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="wrap_content" ads:adUnitId="a150c75f96c352c" ads:adSize="BANNER" ads:loadAdOnCreate="true"/> <org.core.mywindows8.FlowLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:f="http://schemas.android.com/apk/res/org.core.mywindows8" f:horizontalSpacing="6dip" f:verticalSpacing="12dip" f:fitContent="true" android:layout_width="fill_parent" android:layout_height="wrap_content" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/morange1" android:drawableTop="@drawable/tutorials" android:textColor="#ffffff" android:id="@+id/button1" android:paddingTop="16sp" android:drawablePadding="10sp" android:text="@string/tutorials" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/mviolet" android:drawableTop="@drawable/themes" android:textColor="#ffffff" android:id="@+id/button2" android:paddingTop="16sp" android:drawablePadding="10sp" android:text="@string/themes" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/mblu2" android:drawableTop="@drawable/gadgets" android:textColor="#ffffff" android:id="@+id/button3" android:paddingTop="16sp" android:drawablePadding="10sp" android:text="@string/gadgets"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/mgree" android:drawableTop="@drawable/network" android:textColor="#ffffff" android:id="@+id/button4" android:paddingTop="16sp" android:drawablePadding="10sp" android:text="@string/networking"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/mblu3" android:drawableTop="@drawable/search" android:textColor="#ffffff" android:id="@+id/button5" android:paddingTop="16sp" android:drawablePadding="10sp" android:text="@string/win8index"/> </org.core.mywindows8.FlowLayout> </LinearLayout> </ScrollView> 

Puede usar FlowLayout para esto.

Compruebe esto

EDITADO

Agregue la clase, los estilos y los atributos requeridos a su proyecto del acoplamiento que le di. Y utilizar esta disposición, agregándola a su XML de la disposición.


Mencionado en el proyecto Git. Copie todos los archivos del proyecto Git a sus proyectos

FlowLayout de usuario en lugar de LinearLayout en XML

 <com.yourpackage.FlowLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > </com.yourpackage.FlowLayout> 

A continuación, agregue su vista secundaria en ese FlowLayout, puede estar en XML solamente o en tiempo de ejecución.

Otros parámetros soportados son:

 xmlns:f="http://schemas.android.com/apk/res/your.namespace" f:horizontalSpacing="6dip" f:verticalSpacing="12dip" f:orientation="vertical" f:layout_horizontalSpacing="32dip" f:layout_verticalSpacing="32dip" 

He añadido un soporte para ajustar el contenido en una línea. Obtener mi fuente github

Para que esto funcione. Usted necesita dar un atributo más como fitContent a true para su diseño.

F: fitContent = "true"

Respuesta para sus comentarios

F: verticalSpacing = "12dip" – Se utiliza para especificar el espaciado vertical para todo FlowLayout. Es decir, cada vista / botón de niño tendrá el espaciado vertical.

Ejemplo

  <org.apmem.tools.layouts.FlowLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" f:verticalSpacing="12dip" > </org.apmem.tools.layouts.FlowLayout> 

Considerando que, f: layout_verticalSpacing = "32dip" se especifica en un botón secundario cuando especificamos el peso

Ejemplo

 <Button xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" f:layout_verticalSpacing="32dip" > </Button> 

Por lo general, haría que los archivos XML de diseño alternativo para diferentes configuraciones. Cada una de estas carpetas tendrá un archivo xml con el mismo nombre (el que utiliza cuando llama a setContentView() en su Actividad).

 /res/layout/ /res/layout-sw600dp/ /res/layout-sw720dp/ 

Si su proyecto no tiene estas carpetas, puede seguir adelante y hacerlas usted mismo. Esto indica al sistema en tiempo de ejecución que, en función del ancho disponible más pequeño del dispositivo en píxeles independientes de la densidad, se utilizará uno de estos tres diseños. sw600dp se recomienda para especificar "pantallas grandes" como tabletas de 7 pulgadas; sw720dp se recomienda para especificar "xlarge pantallas" como las tabletas de 10 pulgadas. Estos números pueden ser arbitrarios.

También puede hacer lo que Vivek Khandelwal sugirió usar una implementación de FlowLayout, pero eso puede o no funcionar exactamente como usted desea.

He publicado los detalles de una solución sencilla y relativamente concisa aquí:

https://stackoverflow.com/a/23228213/2162226


Resumen :

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.