android中ListView项目的边距
Posted
技术标签:
【中文标题】android中ListView项目的边距【英文标题】:Margin on ListView items in android 【发布时间】:2013-02-26 20:35:59 【问题描述】:我正在尝试(徒劳地)为我的 ListView 项目添加边距。我尝试在下面的 RelativeLayout 中添加边距值,但无论我做什么,我似乎得到的只是每个项目之间的 1px 线。
我真正想要的是在每个项目上都有圆角,一个 1 像素的黑色边框和一个 3-5 像素的左侧、顶部和右侧边距,但现在我会满足于每个项目周围的边距 :-)
如何实现我的目标?只是现在的边距...... ;-)
这是我所拥有的:
更新:我已经更新了下面的 xml,删除了主布局和片段布局。我还将 ListView 项目布局更新为我现在拥有的更接近我想要的但仍然不完美的布局。还添加了屏幕截图
listview 项目布局 xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:paddingLeft="@dimen/matchMargin"
android:paddingRight="@dimen/matchMargin"
android:paddingTop="@dimen/matchMargin" >
<RelativeLayout
android:layout_
android:layout_
android:background="#cfcfcfcf" >
<include
android:id="@+id/matchKampstart"
layout="@layout/kampstart_layout" />
<LinearLayout
android:layout_
android:layout_
android:layout_below="@id/matchKampstart"
android:layout_marginTop="@dimen/belowKampstartMargin" >
<ImageView
android:id="@+id/tournamentImageView"
android:layout_
android:layout_
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_
android:layout_
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_
android:layout_
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_
android:layout_
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_
android:layout_
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_
android:layout_
android:layout_gravity="center_vertical"
android:gravity="center"
android:text="@string/away"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:layout_below="@id/matchKampstart"
android:layout_marginTop="@dimen/belowKampstartMargin" >
<ImageView
android:id="@+id/tvChannelImageView"
android:layout_
android:layout_
android:adjustViewBounds="false"
android:contentDescription="@string/tvChannelImageViewContentDescription"
android:gravity="right"
android:src="@drawable/sofabold_launcher" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
这给了我以下信息,您会注意到每个项目的左右两侧都有一条非常小的线。我也想摆脱它。
【问题讨论】:
你想要边距还是内边距? 创建圆角和边框并不难,这个Developer's Guide 解释了一些细节。 我想要保证金。我希望我的列表项分开。 您不需要以编程方式设置边距。通过 XML 应该就足够了。您是否尝试在项目的 relativeLayout 中添加边距? (并在您的getView()
中删除 dat getlayoutParams
/ setlayoutParams
)
是的。我已经取得了一些成功。我在我的 ListView 项目布局中添加了一个额外的 RelativeLayout,因此我现在在 RelativeLayout 中有一个 RelativeLayout。将更新问题。
【参考方案1】:
我不擅长布局,但我过去注意到 ListView 行经常忽略 LayoutParams。我不知道这发生在哪里,或者是否可以覆盖,我知道您可以通过添加另一个布局轻松解决它:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:background="#990000ff" >
<LinearLayout
android:layout_
android:layout_
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:background="#9900ff00"
android:paddingLeft="10dp" >
<TextView
android:id="@+id/text"
android:layout_
android:layout_
android:background="#99ff0000" />
</LinearLayout>
</LinearLayout>
通常可以删除只有一个子级的布局,但正如您所见,这是有目的的:
最外面的布局是蓝色的,TextView 是红色的,绿色是额外的布局,可以让你添加一些额外的间距。注意填充(左边的绿色)和边距(右边没有绿色)之间的区别。您已明确表示要使用边距 (android:layout_margin
),但您的代码显然使用了填充 (android:padding
),因此我将两者都包括在内。
【讨论】:
谢谢山姆。我想我已经或多或少地做了你所描述的(添加额外的布局)。 AFAICS 你对右边的线有同样的问题(也可能在左边)。知道如何摆脱这些吗? “非常小的线”是指these吗?这些是您可以通过将android:divider
更改为空白或透明图像,或者可能设置android:dividerHeight="0dp"
来删除它们的分隔线。
在外部RelativeLayout 上有padding 的原因就等于在内部RelativeLayout 有margin……不是吗?我会尝试扭转它。
是的 :-) 我的意思是 :-)
我忘了提到 divider
和 dividerHeight
是 ListView 的属性,而不是行布局。【参考方案2】:
看到这个有点晚了,但只需将以下行添加到您的 ListView xml 元素
android:divider="#00000000"
android:dividerHeight="10dp"
【讨论】:
【参考方案3】:请参阅此处的答案以了解原因。简而言之,孩子问父母,列表视图行使用AbsListView.LayoutParams
,其中不包括边距。
Why LinearLayout's margin is being ignored if used as ListView row view
【讨论】:
【参考方案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);
【讨论】:
谢谢。会试一试。没有办法通过 XML 做到这一点?如果是这样,为什么不呢? 我不太清楚,但是当我之前使用 xml 尝试过时。我也没有为我工作。所以我通过在适配器中提供边距解决了这个问题。【参考方案5】:我想你在某个 XML 文件中定义了一个ListView
,如果是这样,你可以在其中添加一些padding
,这样屏幕边缘和 ListView 之间就会有一些空间。
例子:
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:padding="15dp"/>
【讨论】:
以上是关于android中ListView项目的边距的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 中的顶部 ListView 项目上方(以及最后一个项目下方)添加边距
Android ListView 填充内容而不移动 ListView 高度?