ExpandableListView – 如何在父元素之间设置分隔符

我想把分隔符只在父元素之间。 当我设置

android:divider="@drawable/divider" 

android在父元素之间创build分隔符,但也在子元素之间创build分隔符。 当我添加

 android:childDivider="@color/transparent" 

android删除子元素之间的分隔符,但是它们之间的空闲空间依然存在。 为什么? 我试过

 android:dividerHeight="0dp" 

但没有发生。

在所有我想设置父元素之间的分隔线,但我不希望任何分隔线或子元素之间的空白空间。

任何想法如何做到这一点?

Solutions Collecting From Web of "ExpandableListView – 如何在父元素之间设置分隔符"

为了从子视图中删除分隔符,而不是在可扩展列表中的父母之间:

在XML中的ExapandableListView属性中添加android:childDivider="#00000000"

 <ExpandableListView android:id="@+id/elv" android:layout_width="match_parent" android:layout_height="wrap_content" android:childDivider="#00000000" /> 

请参阅此页面以获取更多信息

诀窍是为折叠组布局和最后一个子布局创build一个额外的view

collapse_group.xml:

 <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:color/transparent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="17sp"/> <!-- this is the extra view--> <View android:layout_width="fill_parent" android:layout_height="10dp" android:background="@android:color/transparent"/> </LinearLayout> 

expanded_group.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:color/transparent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="17sp"/> <!-- no extra view--> </LinearLayout> 

并将相同的技术应用于子视图,为最后一个子视图插入额外的视图

赋予分隔线颜色及其高度(当组合物折叠时,分隔符将会显示)

 <ExpandableListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="@color/color_black" android:dividerHeight="1dp" android:groupIndicator="@null" /> 

我所做的是将ExpandableListView的divider设置为0,然后在其ExpandableListAdapter中插入“divider”组:

 // To get dividers between the groups we add 'divider views' as if they were // themselves groups. public int getGroupCount() { // Actual groups are at even groupPositions, dividers at odd return (this.data.size() * 2) - 1; } public long getGroupId(int groupPosition) { if(groupPosition % 2 != 0) return R.id.divider; else return R.id.group; } public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if(groupPosition % 2 != 0) { View divider = convertView; if(divider == null || divider.getId() != R.id.divider) { divider = this.inflater.inflate(R.layout.divider, null); } return divider; } View group = convertView; if(group == null || group.getId() != R.id.group) { group = this.inflater.inflate(R.layout.group, null); } return group; } 
 expListView.setDividerHeight(10); expListView.setChildDivider(getResources().getDrawable( android.R.color.white)); 

如果你想在ExpandableListView(Header)的父元素之间进行分割,并且不想在子元素和父元素之间进行分割,这显然是最自然的情况,那么你必须做以下的事情:

  1. 在您的父级xml文件中,在布局的底部添加一个视图,使用您需要的分隔线高度和分隔线颜色。 例:

  2. 在子XML文件中做同样的事情。 在布局的底部添加一个视图,使用您需要的分隔线高度和分隔线颜色。 确保分隔线的颜色和高度是相同的,如在父母的XML。

  3. 进入你的ExpandableListView Adapter方法public View getGroupView(int groupPosition,boolean isExpanded,View convertView,ViewGroup parent)像这样pipe理View divider的状态:

    if(isExpanded){headerDividerView.setBackgroundColor(ContextCompat.getColor(context,R.color.darker_grey)); } else {headerDividerView.setBackgroundColor(ContextCompat.getColor(context,android.R.color.transparent)); }

顺便说一句:在我的情况下,R.color.darker_grey是父母的背景颜色

  1. 从您的ExpandableListView xml中移除所有分隔符和分隔符高度。 使ExpandableListView不具有分隔符和分隔符高度。 你可以使用这样的attrs:

    android:groupIndicator =“@ null”android:childIndicator =“@ null”android:divider =“@ null”android:dividerHeight =“0dp”

如果只想移除子分隔符,一个简单的技巧是您可以使用与子项目的背景色相同的颜色创build一个可绘制的。 然后将其设置为子分区。

 ShapeDrawable sd1 = new ShapeDrawable(new RectShape()); sd1.getPaint().setColor(YOUR CHILD ITEM BACKGROUND COLOR); mExpListView.setChildDivider(sd1); 

或者使用xml:

 android:childDivider="@color/child_bg_color" 

设置像这样android:divider="@null"父母没有divider android:divider="2dp"为父母设置divider

  <ExpandableListView android:id="@+id/expandable_list" android:layout_width="fill_parent" android:layout_height="match_parent" android:background="#ffffff" android:divider="2dp" android:groupIndicator="@drawable/group_indicator" />