2014-10-10 77 views
2

我正在用listview和一些其他视图创建一个布局。我想完整的布局滚动列表,所以我将其他视图添加为标题。问题是我的列表视图有一些边界,它也适用于标题。ListView标头 - 不同的边距

what it currently looks like

我应该怎么改变,使头部看起来像这 -

What I want

的ListView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="@color/background_color"> 

    <ListView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="10dp" 
      android:layout_marginLeft="10dp" 
      android:scrollbars="none" 
      android:id="@+id/lvProfileAddresses" 
      android:layout_gravity="center_horizontal" 
      android:divider="@color/transparent" 
      android:dividerHeight="10dp" 
      android:paddingBottom="10dp" 
      android:clipToPadding="false" 
      android:cacheColorHint="@color/background_color" 
      android:fadingEdgeLength="3dp" 

      /> 
</LinearLayout> 

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="@color/transparent" 
       > 
    <TextView android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@color/white" 
       android:text="My Addresses" 
       android:textSize="20sp" 
       android:padding="10dp" 
       android:textColor="@color/black" 
      /> 
    <Button android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Add New Address" 
      android:drawableRight="@drawable/small_list_arrow" 
      android:layout_margin="5dp" 
      android:paddingTop="5dp" 
      android:paddingBottom="5dp" 
      android:background="@drawable/linearlayout_shadow"/> 

</LinearLayout> 

如何使ListView的标题具有不同的边距?

+0

你如何添加标题中的ListView? – 2014-10-10 08:29:11

+0

@MysticMagic膨胀的观点,并使用'listview.addHeaderView()' – 2014-10-10 09:30:23

回答

1

我认为最好不要在ListView中添加Header,并保留一个单独的Header。可能你可以使用include

喜欢的东西:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/background_color"> 

    <include 
     android:id="@+id/header" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     layout="@layout/header" /> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="10dp" 
     android:layout_marginLeft="10dp" 
     android:scrollbars="none" 
     android:id="@+id/lvProfileAddresses" 
     android:layout_gravity="center_horizontal" 
     android:divider="@color/transparent" 
     android:dividerHeight="10dp" 
     android:paddingBottom="10dp" 
     android:clipToPadding="false" 
     android:cacheColorHint="@color/background_color" 
     android:fadingEdgeLength="3dp" /> 
</LinearLayout> 

你只需要在ListView控件一次在顶部。所以我认为这将是一个更好的方法。希望能帮助到你。

编辑:

当你需要保持水箱内的ListView与ListView的项目一起滚动,你可以去大概用另一种方式:

  1. 取下整个ListView的保证金性质。

  2. 将边距应用于ListView的row_item.xml。为此,您需要将row.xml的外部容器包含在另一个父容器中,比如说LinearLayout。所以保证金会起作用。

希望这会有所帮助。

+0

但不会使这个头不能滚动列表?我想让我的完整版面与列表一起滚动。 – 2014-10-10 09:29:31

+0

然后我想你可以从整个列表视图中删除边距,并给list_row.xml留下余量@RohanKandwal – 2014-10-10 09:32:49

+0

我试过了,行不接受边距。 – 2014-10-10 09:35:10

0

如果你想使用头部来做,你需要从你的列表视图中删除边距属性,因为它会影响所有的孩子,并为你的列表项添加相同的边距。

+0

为listItem添加边距不起作用。当从列表视图中删除边距时,子级扩展为全角。 – 2014-10-10 09:34:08

+1

对不起。这是因为ListView.LayoutParams不是MarginLayoutParams的孩子。所以你可以把你的listitem放在framelayout里边,并且在背景上设置填充,然后在这个frame layout中设置填充 – 2014-10-10 11:19:54

0

我最近碰到同样的问题,从我在平台上看到的一些人还在为此而苦苦挣扎。 基于我的研究它看起来像列表视图将覆盖标题页边距以及填充。

该解决方案将是:

  1. 把你的头的ViewGroup另一个ViewGroup中,其 机器人内部:layout_height = “WRAP_CONTENT” 和android:layout_width = “match_parent”。
  2. 然后将所需的任何边距应用于内部视图组。

在你的情况,头布局是这样的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:orientation="vertical"> 

    <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_marginTop ="40dp" //For Example 
       android:layout_marginRight="20dp" 
       android:layout_marginEnd="20dp" 
       android:background="@color/transparent"> 

      <TextView android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@color/white" 
       android:text="My Addresses" 
       android:textSize="20sp" 
       android:padding="10dp" 
       android:textColor="@color/black"/> 

       <Button android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Add New Address" 
       android:drawableRight="@drawable/small_list_arrow" 
       android:layout_margin="5dp" 
       android:paddingTop="5dp" 
       android:paddingBottom="5dp" 
       android:background="@drawable/linearlayout_shadow"/> 

     </LinearLayout> 
</LinearLayout> 

希望这有助于