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

时间:2011-07-14 14:34:24

标签: android parent expandablelistview divider

我想在父元素之间放置divider。当我设置

android:divider="@drawable/divider"
android在父元素之间创建分隔符,但也在子元素之间创建分隔符。当我添加
android:childDivider="@color/transparent"
android删除子元素之间的分隔符,但它们之间的空闲空间仍然存在。为什么? 我试过
android:dividerHeight="0dp"
但没有发生任何事情。

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

任何想法怎么做??

9 个答案:

答案 0 :(得分:25)

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

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

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

有关详细信息,请参阅this page

答案 1 :(得分:5)

赋予分割器颜色及其高度(当组折叠时分隔符将可见)

<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" />

答案 2 :(得分:4)

诀窍是为折叠组布局和最后一个子布局创建额外的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>

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

答案 3 :(得分:1)

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

// 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;
}

答案 4 :(得分:1)

expListView.setDividerHeight(10);
expListView.setChildDivider(getResources().getDrawable(
            android.R.color.white));

答案 5 :(得分:1)

如果您只想删除子分隔符,一个简单的技巧是您可以创建一个与您的子项目背景颜色相同颜色的drawable。然后将其设置为子分隔符。

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

或使用xml:

android:childDivider="@color/child_bg_color"

答案 6 :(得分:0)

如果你想在ExpandableListView(Header)的父元素之间设置divider并且不希望在children和parent之间有分隔符,这显然是最自然的情况,那么你必须做以下事情:

  1. 在您的父xml文件中,在布局底部添加一个视图,其中包含您需要的分隔符高度和分隔符颜色。 例如:

  2. 在子xml文件中执行相同操作。在布局底部添加一个视图,其中包含您需要的分隔符高度和分隔符颜色。确保分隔符颜色和高度与父xml相同。

  3. 进入ExpandableListView Adapter方法 public View getGroupView(int groupPosition,boolean isExpanded,                          查看convertView,ViewGroup parent) 像这样管理View分隔符的状态: 例如:

    如果(isExpanded){             headerDividerView.setBackgroundColor(ContextCompat.getColor(上下文,R.color.darker_grey));         }其他{             headerDividerView.setBackgroundColor(ContextCompat.getColor(上下文,android.R.color.transparent));         }

  4. BTW:在我的情况下,R.color.darker_grey是父母的背景色

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

      机器人:groupIndicator = “@空”  机器人:childIndicator = “@空”  机器人:分隔=“@空”  机器人:dividerHeight = “0dp”

答案 7 :(得分:0)

我通过将两个视图分别添加到标题和另一个视图添加到子项来解决此问题,如下所示。

Header.xml

cv2.rectangle(face, (bottom_left, top_left), (top_right, bottom_right), (255, 0, 0), 3)

child.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<RelativeLayout
android:id="@+id/rl_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/square_box"
android:padding="@dimen/padding_10">

<ImageView
    android:id="@+id/expandableIndicator"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:src="@drawable/ic_downarrow" />
</RelativeLayout>

<View
android:id="@+id/view_hidden"
android:layout_width="match_parent"
android:layout_height="10dp"
android:layout_below="@+id/rl_header"
android:background="@android:color/transparent" />
</RelativeLayout>

现在将此代码添加到您的Adapter类中。这个想法是在组展开/折叠时显示/隐藏“视图”,在子项的最后一项上显示。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<RelativeLayout
android:id="@+id/rl_childView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/square_box"
android:padding="@dimen/padding_10">

<TextView
    android:id="@+id/tv_startDate"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:gravity="left"
    android:paddingTop="@dimen/padding_5"
    android:paddingBottom="@dimen/padding_5"
    android:text="Start Date \nSep. 23, 2019"
    android:textSize="@dimen/text_16" />

<ImageView
    android:id="@+id/iv_arrow"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:src="@drawable/right_arrow" />
</RelativeLayout>

<View
    android:id="@+id/view_hidden"
    android:layout_width="match_parent"
    android:layout_height="10dp"
    android:layout_below="@+id/rl_childView"
    android:background="@android:color/transparent" />
</RelativeLayout>

答案 8 :(得分:-2)

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

 <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" />