如何在水平线性布局中包装图像button?

有没有什么办法将水平线性布局中的图像button? 或者还有其他的方法来做下面的事情吗?

我有六个图像button。 假设这些button出现在像这样的中分辨率设备中:

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

我希望这些button出现在平板电脑或任何高分辨率设备,如:

 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> 

Solutions Collecting From Web of "如何在水平线性布局中包装图像button?"

你可以使用FlowLayout来做到这一点。

检查这个

EDITED

从我给你的链接添加所需的类,样式和属性到你的项目。 使用这个布局,把它添加到你的布局XML中。


在Git Project中提到..将Git Project中的所有文件复制到您的项目中

用户FlowLayout代替XML中的LinearLayout

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

F:fitContent = “真”

回答您的意见

f:verticalSpacing =“12dip” – 用于指定整个FlowLayout的垂直间距。 即每个子视图/button将有垂直间距。

  <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

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

一般来说,你会为不同的configuration制作备用的布局XML文件。 这些文件夹中的每一个都会有一个名称相同的xml文件setContentView()在您的Activity中调用setContentView()时使用的文件)。

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

如果你的项目没有这些文件夹,你可以继续自己做。 这告诉系统在运行时,根据密度无关像素中设备的最小可用宽度,将使用这三种布局中的一种。 build议使用sw600dp来指定7英寸平板电脑等“大屏幕”; 推荐使用sw720dp来指定10英寸平板电脑的“大屏幕”。 这些数字可以是任意的。

您也可以像Vivek Khandelwal所build议的那样使用FlowLayout实现,但这可能会或可能不会完全按照您的要求工作。

我在这里发布了一个简单而相对简洁的解决scheme的细节:

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


总结

  • 解决scheme基于这个共享的项目: http : //hzqtc.github.io/2013/12/android-custom-layout-flowlayout.html

  • 我的文章解释了如何解决使用该示例时遇到的错误