java - Android 自定义 ListViewItem 布局

标签 java android xml intellij-idea

我不太明白我的 ListView 项目的布局没有像我想要的那样显示。 我希望有人能给我一些提示,因为我已经有一段时间无法让它工作了。 我想要的是如下:

enter image description here

这是我的方法:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="20dip"
android:padding="6dip">
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="3dip">
        <TextView
            android:id="@+id/nametext"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
        />
</LinearLayout>
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="7dip">
        <ImageView
            android:id="@+id/photo"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_marginRight="6dip"
            android:src="@drawable/icon" />
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="0dip"
            android:layout_weight="1"
            android:layout_height="fill_parent">
            <TextView
                android:id="@+id/toptext"
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:gravity="center_vertical"
            />
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:id="@+id/middletext"
                android:singleLine="true"
                android:ellipsize="marquee"
            />
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:id="@+id/bottomtext"
                android:singleLine="true"
                android:ellipsize="marquee"
            />
        </LinearLayout>
        <ImageView
            android:id="@+id/stars"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_marginLeft="6dip"
            android:src="@drawable/icon" />
</LinearLayout>

如有任何帮助,我们将不胜感激。 我已经尝试过不同的尺寸和相对布局。不用找了。 它看起来并不像我想象的那样。

编辑缺少的三个空格

编辑2添加了图片

最佳答案

您可以使用 LinearLayouts 来完成此操作,但您需要三个嵌套布局:

  1. 包含所有内容的垂直 LinearLayout。
  2. 水平 LinearLayout,包含除标题之外的所有内容。
  3. 包含非标题 TextView 的垂直 LinearLayout。

内部垂直 LinearLayout 可能需要 android:layout_weight="1" 因此它会拉伸(stretch)以填充可用空间,但不会挤出右侧的 ImageView。

这一切都非常昂贵,特别是当乘以 ListView 中的大量 View 时。相对布局只需一个布局即可完成此任务。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:padding="6dip" >
    <TextView 
        android:id="@+id/textView1" 
        android:layout_alignParentTop="true" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:gravity="center_vertical|center_horizontal" 
        android:textSize="40sp">
    </TextView>
    <ImageView 
        android:id="@+id/imageView1" 
        android:layout_below="@+id/textView1" 
        android:layout_alignParentBottom="true" 
        android:layout_alignParentLeft="true"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/icon" >
    </ImageView>
    <ImageView 
        android:id="@+id/imageView2" 
        android:layout_below="@+id/textView1"
        android:layout_alignParentBottom="true" 
        android:layout_alignParentRight="true" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/icon" >
    </ImageView>
    <TextView 
        android:id="@+id/textView2" 
        android:layout_below="@+id/textView1"
        android:layout_toRightOf="@+id/imageView1" 
        android:layout_toLeftOf="@+id/imageView2" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:gravity="center_horizontal" 
        android:text="TextView" >
    </TextView>
    <TextView 
        android:id="@+id/textView3" 
        android:layout_below="@+id/textView2"
        android:layout_toRightOf="@+id/imageView1" 
        android:layout_toLeftOf="@+id/imageView2" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:gravity="center_horizontal" 
        android:text="TextView" >
    </TextView>
    <TextView 
        android:id="@+id/textView4" 
        android:layout_below="@+id/textView3"
        android:layout_toRightOf="@+id/imageView1" 
        android:layout_toLeftOf="@+id/imageView2" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:gravity="center_horizontal" 
        android:text="TextView" >
    </TextView>
</RelativeLayout>

编辑格式并添加:

这就是结果。当然,文字和图片的大小需要调整,但基本的结果就是你所描述的。

ListView screenshot

关于java - Android 自定义 ListViewItem 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5515192/

相关文章:

java - 为什么Android studio上找不到小程序?

java - 写入 NFS 存储的文件有时会损坏

java - Java 泛型和 Scala 的交集……进展不顺利

java - 无法关闭我的文件

java - 在 Controller 中获取 Spring boot/security 的 session token

java - ObjectMapper 截断 Map 中的日期

android - 如何在微调器中仅显示文本

android - 谷歌奖励视频加载失败

c# - 读取 XML 错误

Javascript:如何通过元素名称而不是 XML 树位置查找子节点?