1

我正在尝试设置一个 xml 布局以用于ListView. 布局由一个根LinearLayout和一个RelativeLayout包含两个的子项ImageViews(一个锚定到另一个的底部/右角)和一个LinearLayout包含两个的子项组成TextViews。我希望列表视图中的每一行都具有相同的宽度和高度,尽管子视图中的内容大小。我意识到我不能使用wrap_content哪个来根据内容调整视图的大小,但我不清楚应该使用什么来实现统一的宽度/高度。我尝试使用固定dp值,但这只会让它变得更糟。我附上了两张截图。第一个来自 iOS 版本,展示了它的外观,而第二个展示了它在 Android 版本上的外观,布局如下。如前所述,我知道出了什么问题(wrap_content属性),但是如何正确地将其更改为大小?提前致谢!

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <RelativeLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" 
       android:id="@+id/campaign_thumbnail_container" >

        <ImageView
            android:id="@+id/campaign_thumbnail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        />

        <ImageView
           android:id="@+id/campaign_mark_new"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignBottom="@id/campaign_thumbnail"
           android:layout_alignRight="@id/campaign_thumbnail"
           android:src="@drawable/new1" />
    </RelativeLayout>

   <LinearLayout
        android:id="@+id/campaign_bg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/word_bar"
        android:orientation="vertical" >

       <TextView
            android:id="@+id/campaign_category"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Medium Text"
            android:textAppearance="?android:attr/textAppearanceMedium" />

      <TextView
        android:id="@+id/campaign_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/campaign_desc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Small Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/campaign_footer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Small Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</LinearLayout>

4

2 回答 2

1

你需要使用相对布局吗?如果没有,请使用带有这样的权重的线性布局。

<LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" 
       android:orientation="horizontal"
       android:id="@+id/campaign_thumbnail_container"
       android:weightSum="100" >

        <ImageView
            android:id="@+id/campaign_thumbnail"
            android:layout_width="0dip"
            android:layout_height="match_parent"
            android:layout_weight="50"
            android:scaleType="fitCenter"
        />

        <ImageView
           android:id="@+id/campaign_mark_new"
           android:layout_width="0dip"
           android:layout_height="match_parent"
           android:src="@drawable/new1"
           android:layout_weight=50
           android:scaleType="fitCenter" />

 </LinearLayout>

这是未经测试的,但过去类似的解决方案对我有用。

于 2013-09-10T16:20:11.863 回答
1

编辑 - 根据以下评论:

一件通用的事情:要统一调整 LinearLayout 中的元素大小,您需要做两件事:

  • android:layout_weight对每个元素使用相等
  • 制作宽度或高度(无论大小必须是唯一的)="0dip"

这是因为权重因子仅用于填充剩余的可用空间。首先使用它们的权重/高度放置所有元素,然后计算仍然可用的空间并按权重分配给每个元素。

编辑端

现在,让我逐步创建布局。首先,这将是您的一个条目的布局,没有“新广告系列”指示。

<!-- Type 1: Picture left, text right. half-half size. Picture resized to fit -->
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:scaleType="fitCenter"
        android:src="@android:drawable/ic_menu_camera" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="Your Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

您会收到警告,因为 LinearLayout 本身具有权重。这是必要的,以使所有列表条目具有相同的高度。

这是类型2:

<!-- Type 2: Picture right, text left. half-half size. Picture resized to fit -->
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="Your Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:scaleType="fitCenter"
        android:src="@android:drawable/ic_menu_camera" />

</LinearLayout>

(我的“这很容易!”按钮在哪里?)

和类型 3。更容易:

<!-- Type 3: Picture full width. Picture resized to fit -->
<ImageView
    android:id="@+id/imageView2"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:scaleType="fitCenter"
    android:src="@android:drawable/ic_menu_camera" />

现在是最后一件事。将这三个布局放在单独的 XML 文件中,并将它们包含在包装的 RelativeLayout 中。

<!-- Finally overlay the entry with a new indication -->
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1" >

    <ImageView
        android:id="@+id/newIndication"
        android:layout_width="24dip"
        android:layout_height="24dip"
        android:layout_alignRight="@+id/entry1"
        android:layout_alignBottom="@+id/entry1"
        android:scaleType="fitCenter"
        android:src="@android:drawable/ic_input_add" />

    <include
        layout="@layout/type1entry"
        android:id="@+id/entry1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</RelativeLayout>

注意include. 我已将 Type1 LinearLayout 放在它自己的名为“type1entry”的 XML 文件中。通过给它一个新的 id,@+id/entry1我可以在 Activity 中显式地访问这个条目。此外,我已将指标的大小设为 24dip(平方)。相应地将其更改为您的图像。

我检查了 Eclipse 中的布局,它们看起来确实符合我的预期。

于 2013-09-10T18:15:46.993 回答