Как обернуть кнопки изображения в горизонтальной линейной компоновке?

Есть ли способ обернуть кнопки изображения в горизонтальной линейной компоновке? Или есть ли другой способ сделать следующее?

У меня шесть кнопок изображения. Предположим, что эти кнопки появляются в устройстве с таким низким разрешением, как это:

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

Я хочу, чтобы эти кнопки отображались на планшете или на любом устройстве с высоким разрешением:

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

Или вот так:

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

В соответствии с экранами устройств. Пожалуйста помоги.

Вот мой основной файл xml:

 <?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> 

    Для этого вы можете использовать FlowLayout.

    Проверьте это

    РЕДАКТИРОВАНИЕ

    Добавьте требуемый класс, стили и атрибуты в свой проект из ссылки, которую я вам дал. И используйте этот макет, добавив его в свой формат XML.


    Упоминается в проекте Git .. Скопируйте все файлы из Git Project в свои проекты

    Пользователь FlowLayout вместо LinearLayout в 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> 

    А затем добавьте представление вашего ребенка в этот FlowLayout, может быть только в формате XML или во время выполнения.

    Другие поддерживаемые параметры:

     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" 

    Я добавил поддержку, чтобы соответствовать контенту в строке. Получите мой источник github

    Сделать эту работу. Вам нужно указать еще один атрибут как fitContent для true для вашего макета.

    е: fitContent = "истина"

    Ответьте на ваши комментарии

    F: verticalSpacing = "12dip" – используется для указания вертикального интервала для всего FlowLayout. Т.е. каждый дочерний вид / кнопка будет иметь вертикальное расстояние.

    пример

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

    В то время как f: layout_verticalSpacing = "32dip" указывается дочерней кнопке, поскольку мы указываем вес

    пример

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

    Как правило, вы должны создавать альтернативные XML-файлы разметки для разных конфигураций. Каждая из этих папок будет иметь xml-файл с тем же именем (тот, который вы используете, когда вы вызываете setContentView() в своей деятельности).

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

    Если у вашего проекта нет этих папок, вы можете пойти и сделать их сами. Это сообщает системе во время выполнения, что на основе наименьшей доступной ширины устройства в не зависящих от плотности пикселях будет использоваться один из этих трех макетов. sw600dp рекомендуется для указания «больших экранов», таких как 7-дюймовые планшеты; sw720dp рекомендуется для указания «xlarge screen», например, 10-дюймовых планшетов. Эти числа могут быть произвольными.

    Вы также можете сделать так, как Вивек Ханделвал предложил использовать реализацию FlowLayout, но это может работать или не работать точно так, как вы этого хотите.

    Я разместил детали для простого и относительно краткого решения здесь:

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


    Резюме :