9

有没有办法在水平线性布局中包装图像按钮?或者还有其他方法可以做以下事情吗?

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

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

3 回答 3

10

您可以为此使用 FlowLayout。

检查这个

已编辑

从我给您的链接中将所需的类、样式和属性添加到您的项目中。并通过将其添加到您的布局 XML 中来使用此布局。


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

用户 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="true"

回答您的意见

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>
于 2013-01-02T04:45:13.117 回答
0

我在这里发布了一个简单且相对简洁的解决方案的详细信息:

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


摘要

于 2014-04-22T19:21:39.920 回答
0

通常,您会为不同的配置制作备用布局 XML 文件。这些文件夹中的每一个都将有一个同名的 xml 文件(您setContentView()在 Activity 中调用时使用的文件)。

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

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

您也可以按照 Vivek Khandelwal 的建议使用 FlowLayout 实现,但这可能会或可能不会完全按照您的意愿工作。

于 2013-01-02T04:55:23.627 回答