是否可以为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布局属性。
答案 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的布局文件中给出边距来实现它,然后你就可以得到输出。