4

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

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

EDIT1:更多信息

紫色视图是 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.test.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>

由于这篇文章的长度,我在这里删除了无用的布局属性。 这是它的样子

4

4 回答 4

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>
于 2012-12-27T12:32:32.933 回答
0

在您的标题部分中,添加以下标签:

android:layout_alignParentLeft="true"

这将解决您的问题。

于 2012-12-27T07:53:36.673 回答
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从根生成。

然后如果第三个参数是temp.setLayoutParams(params)的,那么只有paramsroot生成的make!和温度是作为回报....

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

如果你只是这样做LayoutInflater.from(this).inflate(R.layout.popup_choose_type, null);,并且如果你设置了一些属性paddingBottom,你会感到惊讶的是它不起作用!!因为丢失了LayoutParams

至于如何解决,可以看 这里

于 2016-01-23T05:48:22.787 回答
-1

您可以通过在 listview 的布局文件中提供边距来做到这一点,然后您将得到它的输出。

于 2012-12-27T07:40:27.800 回答