Android - 无法正确调整用于 ListView 行的 xml 布局

标签 android xml android-layout listview

我正在尝试设置一个 xml 布局以用于 ListView 中的一行。该布局由一个根 LinearLayout 和一个子 RelativeLayout 组成,子 RelativeLayout 包含两个 ImageView(一个锚定到另一个的底部/右角)和一个子垂直LinearLayout 包含两个 TextViews。我希望 ListView 中的每一行都具有相同的宽度和高度,尽 pipe View 中内容的大小。我意识到我不能使用 wrap_content 来根据内容调整 View 的大小,但我不清楚应该使用什么来实现统一的宽度/高度。我尝试使用固定的 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>

最佳答案

编辑 - 根据以下评论:

一件通用的事情:要统一调整 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/entry1 给它一个新的 id,我可以在 Activity 中明确地访问这个条目。此外,我已将指标的大小设置为 24dip in square。相应地将其更改为您的图像。

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

关于Android - 无法正确调整用于 ListView 行的 xml 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723989/

相关文章:

java - 如何使单行(RowTable)中的所有小部件可见?

c# - LinQ to XML 访问元素及其值

android - 保存和恢复一个布局的多个版本的状态的正确方法

android - 在 ViewPager 中垂直滚动页面

java - 安卓USB应用

android - 如何使用 xml 中的可绘制形状绘制半椭圆形 (Android)

使用 Intent 的 Activity 中的 Android Activity

c# - 搜索带有 xml 命名空间前缀 C# 的 XML 元素

javascript - XSLT 和 XML 内容未在 Microsoft Edge 和 Internet Explorer 浏览器中加载问题

android - 如何在 Android 中使用抽屉导航获取滚动 Activity ( Material 设计)