【问题标题】:Relative layout messed up in listview列表视图中的相对布局混乱
【发布时间】:2014-11-20 03:25:14
【问题描述】:

问题描述

我使用PullToRefreshListview显示文件夹列表,列表项布局使用自定义布局。

在列表项布局中,我使用RelativeLayout 作为根容器。 运行 apk 时,ListView 的布局在开始时可以正常工作,但是当单击丢失子文件夹和文件的文件夹时会出现问题。

子文件夹布局混乱。奇怪的是,并非所有的子文件夹布局都变得凌乱,只有丢失文件的子文件夹和子子文件夹。 我通过安装了 Kitkat OS 的 1280 * 720 pix、hdpi 屏幕 Android 设备对其进行了测试。

凌乱的布局截图

xml代码

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="48dp" android:background="@color/white"
    android:padding="10dp" >

    <ImageView
        android:id="@+id/list_item_icon"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="8dp"
        android:layout_marginEnd="8dp"
        android:paddingBottom="4dp"
        android:src="@drawable/folder" />

    <ImageView
        android:id="@+id/list_item_action"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="2dp"
        android:layout_marginEnd="2dp"
        android:layout_width="60dp"
        android:src="@drawable/folder"
        android:layout_height="fill_parent" />

    <TextView
        android:id="@+id/list_item_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/list_item_icon"
        android:layout_toEndOf="@id/list_item_icon"
        android:layout_toStartOf="@id/list_item_action"
        android:layout_toLeftOf="@id/list_item_action"
        android:lines="1"
        android:singleLine="true" android:text="list_item_titlelist_item_titlelist_item_titlelist_item_titlelist_item_titlelist_item_title"
        android:textColor="#282828"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/list_item_subtitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/list_item_title"
        android:layout_toRightOf="@id/list_item_icon"
        android:layout_toLeftOf="@id/list_item_action"
        android:layout_toEndOf="@id/list_item_icon"
        android:layout_toStartOf="@id/list_item_action"
        android:textColor="#555555" android:text="list_item_titlem_titlelist_item_title"
        android:textSize="12sp" />

</RelativeLayout>

在图形布局工具中预览

【问题讨论】:

  • 可以在github上找到主xmlhere
  • 确保所有图像的图像宽度相同..

标签: android android-layout listview android-relativelayout


【解决方案1】:

试试这个。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="48dp"
    android:background="@color/white"
    android:padding="10dp" >

    <ImageView
        android:id="@+id/list_item_icon"
        android:layout_width="60dp"
        android:layout_height="fill_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/folder" />

    <ImageView
        android:id="@+id/list_item_action"
        android:layout_width="60dp"
        android:layout_height="fill_parent"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:src="@drawable/folder" />

    <TextView
        android:id="@+id/list_item_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/list_item_action"
        android:layout_toRightOf="@id/list_item_icon"
        android:gravity="left"
        android:lines="1"
        android:paddingLeft="8dp"
        android:singleLine="true"
        android:text="list_item_titlelist_item_titlelist_item_titlelist_item_titlelist_item_titlelist_item_title"
        android:textColor="#282828"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/list_item_subtitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/list_item_title"
        android:layout_below="@id/list_item_title"
        android:layout_toLeftOf="@+id/list_item_action"
        android:gravity="left"
        android:paddingLeft="8dp"
        android:text="list_item_titlem_titlelist_item_title"
        android:textColor="#555555"
        android:textSize="12sp" />

</RelativeLayout>

【讨论】:

    【解决方案2】:

    使用带权重的 LinearLayout 而不是 RelativeLayout,这可以轻松满足您的要求:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="@color/white"
        android:padding="10dp" >
    
        <ImageView
            android:id="@+id/list_item_icon"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:src="@drawable/folder" />
    
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="vertical">
            <TextView
                android:id="@+id/list_item_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:lines="1"
                android:singleLine="true" 
                android:text="list_item_titlelist_item_titlelist_item_titlelist_item_titlelist_item_titlelist_item_title"
                android:textColor="#282828"
                android:textSize="14sp" />
    
            <TextView
                android:id="@+id/list_item_subtitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="#555555" 
                android:text="list_item_titlem_titlelist_item_title"
                android:textSize="12sp" />
    
        </LinearLayout>
    
    
        <ImageView
            android:id="@+id/list_item_action"
            android:layout_width="60dp"
            android:src="@drawable/folder"
            android:layout_height="match_parent" />
    </LinearLayout>
    

    【讨论】:

    • 这并不能修复错误。可能是 Pullt To Refresh Listview 引起的。我忘了注意到我使用的是 PullToRefreshListView 而不是内置的 Listview
    • 我认为无论您使用哪种 ListView 类型,这都是您的列表项布局。
    • 但是我复制了你的代码并运行它,出现同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多