android 中 ListView 项目的边距

问题描述 投票:0回答:6

我正在尝试(徒劳地)为我的 ListView 项目添加边距。我尝试在下面的相对布局中添加边距值,但无论我做什么,我似乎得到的只是每个项目之间有一条 1px 的线。

我真正想要的是每个项目都有圆角、1px 黑色边框和左侧、顶部和右侧 3-5px 的边距,但现在我会满足于每个项目周围只有一个边距:-)

我如何实现我的目标?现在只是余量...;-)

这是我所拥有的:

更新:我更新了下面的 xml,删除了主布局和片段布局。我还将 ListView 项目布局更新为我现在拥有的,这更接近我想要的,但仍然不完美。还添加了屏幕截图

listview 项目布局 xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/matchMargin"
android:paddingRight="@dimen/matchMargin"
android:paddingTop="@dimen/matchMargin" >

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#cfcfcfcf" >

    <include
        android:id="@+id/matchKampstart"
        layout="@layout/kampstart_layout" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/matchKampstart"
        android:layout_marginTop="@dimen/belowKampstartMargin" >

        <ImageView
            android:id="@+id/tournamentImageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="2dp"
            android:adjustViewBounds="true"
            android:contentDescription="@string/tournamentImageViewContentDescription"
            android:gravity="left"
            android:src="@drawable/sofabold_launcher" />

        <ImageView
            android:id="@+id/homeTeamImageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="2dp"
            android:adjustViewBounds="true"
            android:contentDescription="@string/homeTeamImageViewContentDescription"
            android:src="@drawable/sofabold_launcher" />

        <TextView
            android:id="@+id/homeTeam"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="2dp"
            android:text="@string/home"
            android:textSize="14sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/dash"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="2dp"
            android:gravity="center"
            android:text="@string/dash"
            android:textSize="12sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/awayTeamImageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="2dp"
            android:adjustViewBounds="true"
            android:contentDescription="@string/awayTeamImageViewContentDescription"
            android:src="@drawable/sofabold_launcher" />

        <TextView
            android:id="@+id/awayTeam"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:gravity="center"
            android:text="@string/away"
            android:textSize="14sp"
            android:textStyle="bold" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@id/matchKampstart"
        android:layout_marginTop="@dimen/belowKampstartMargin" >

        <ImageView
            android:id="@+id/tvChannelImageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="false"
            android:contentDescription="@string/tvChannelImageViewContentDescription"
            android:gravity="right"
            android:src="@drawable/sofabold_launcher" />
    </LinearLayout>

</RelativeLayout>

</RelativeLayout>

这给了我以下内容,您会注意到每个项目的右侧和左侧都有一条非常小的线。我也想摆脱它。

enter image description here

android android-layout android-listview
6个回答
70
投票

我不太擅长布局,但我过去注意到 ListView 行经常忽略 LayoutParams。我不知道这种情况发生在哪里,也不知道是否可以覆盖,我知道您可以通过添加另一个布局轻松解决它:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:background="#990000ff" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:background="#9900ff00"
        android:paddingLeft="10dp" >

        <TextView
            android:id="@+id/text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#99ff0000" />
    </LinearLayout>

</LinearLayout>

通常只有一个子布局可以被删除,但正如你所看到的,这个布局有一个目的:

Screen Shot

最外面的布局是蓝色的,TextView是红色的,绿色是额外的布局,可以让你添加一些额外的间距。请注意内边距(左侧的绿色)和边距(右侧没有绿色)之间的区别。您已明确表示要使用边距 (

android:layout_margin
),但您的代码明确使用填充 (
android:padding
),因此我将两者都包含在内。


19
投票

看到这个有点晚了,但只需将以下行添加到您的 ListView xml 元素中

android:divider="#00000000"
android:dividerHeight="10dp"

12
投票

请参阅此处的答案了解原因。简而言之,子级询问父级,列表视图行使用

AbsListView.LayoutParams
,不包括边距。

为什么 LinearLayout 的边距在用作 ListView 行视图时会被忽略


4
投票

在您的适配器中,在 getView() 中捕获相对布局,然后给出布局参数,

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)view.getLayoutParams();
params.setMargins(80, 0, 0, 0); //substitute parameters for left, top, right, bottom
YourRelativeLayoutInAdapter.setLayoutParams(params);

3
投票

我想你在 XML 文件中的某处定义了

ListView
,如果是这样,你可以向其中添加一些
padding
,这样屏幕边缘和 ListView 之间就会有一些空间。

示例:

<ListView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="15dp"/>

0
投票

使用

RecyclerView
代替
ListView
。 使用您想要的任何边距。他们会工作的:-)

© www.soinside.com 2019 - 2024. All rights reserved.