Android:ListView的边距/填充没有应用于标题的边距?

时间:2012-12-27 07:32:43

标签: android android-layout android-listview

是否可以为ListView设置边距/填充而不将边距应用于标头?我希望我的ListView与Google Now布局一样。除了这个小问题,我已经完成了所有工作。

问题:是否可以不将ListView的布局参数应用于其标题?

EDIT1:更多信息

紫色视图是listView的标题。 我已经尝试在列表项布局中添加边距。这也不起作用。 我需要的是一种方法,将边距应用于列表视图,以便它不会将边距应用于listView中的标题。

EDIT2: 我的布局 header.xml

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

    <View
        android:layout_width="match_parent"
        android:layout_height="@dimen/top_height"
        android:background="@color/top_item" />

    <View
        android:id="@+id/placeholder"
        android:layout_width="match_parent"
        android:layout_height="@dimen/sticky_height"
        android:layout_gravity="bottom" />

</FrameLayout>

root_list.xml

<LinearLayout>
<com.abhijith.CustomListView
    android:id="@android:id/list"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:layout_height="wrap_content" /></LinearLayout>

list_item.xml

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

<TextView
    android:id="@+id/textview_note"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/textview_note_date"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/></LinearLayout>

由于这篇文章的篇幅,我在这里删除了uselsess布局属性。 This is how it looks

4 个答案:

答案 0 :(得分:7)

经过大量挖掘后,我发现将listView布局参数与其标题分离并且标题是listView的一部分是不可能的。因此,为了获得所需的保证金效果,经过多次调查,我发现在列表视图项中添加边距到布局的根目录不起作用。所以我在现有的根LinearLayout(嵌套的LinearLayout)中添加了另一个虚拟LinearLayout,并在嵌套布局中添加了子项。内部布局的现在设置边距给出了所需的效果。

代码:

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="16dp"
        android:layout_marginLeft="16dp"
        android:background="@drawable/list_selector"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textview_note"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/textview_note_date"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>

答案 1 :(得分:0)

在标题部分中,添加以下标记:

android:layout_alignParentLeft="true"

这将解决您的问题。

答案 2 :(得分:0)

// Temp is the root view that was found in the xml
final View temp = createViewFromTag(root, name, attrs, false);

ViewGroup.LayoutParams params = null;

if (root != null) {
    if (DEBUG) {
        System.out.println("Creating params from root: " +
                root);
    }
    // Create layout params that match root, if supplied
    params = root.generateLayoutParams(attrs);
    if (!attachToRoot) {
        // Set the layout params for temp if we are not
        // attaching. (If we are, we use addView, below)
        temp.setLayoutParams(params);
    }

// We are supposed to attach all the views we found (int temp)
// to root. Do that now.
if (root != null && attachToRoot) {
    root.addView(temp, params);
}

// Decide whether to return the root that was passed in or the
// top view found in xml.
if (root == null || !attachToRoot) {
    result = temp;
}

...
return result;

这是LayoutInflater的代码,正如您所看到的,如果您添加root,它不为空,则从根生成layoutParams

然后如果thrid参数 false ,则只有make temp.setLayoutParams(params)params生成{!}}!而温度就是回报....

如果attachToRoot 为真,root将执行root.addView(temp,params),然后root将作为return ..

如果您只是LayoutInflater.from(this).inflate(R.layout.popup_choose_type, null);,并且如果您将某个属性设置为paddingBottom,则会因为丢失 LayoutParams 而感到惊讶,因为它无法正常工作!

至于如何解决它,你可以看到 here

答案 3 :(得分:-1)

你可以通过在listview的布局文件中给出边距来实现它,然后你就可以得到输出。