21

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

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

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

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

4

9 回答 9

29

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

android:childDivider="#00000000"ExapandableListViewXML中添加属性:

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

有关更多信息,请参阅此页面

于 2013-11-28T19:40:57.657 回答
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" />
于 2015-12-29T10:28:54.670 回答
4

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

折叠组.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>

扩展组.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>

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

于 2011-10-08T02:47:47.937 回答
1

我所做的是将 ExpandableListView 的分隔符设置为 0,然后将“分隔符”组插入它的 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;
}
于 2011-09-30T01:08:33.230 回答
1
expListView.setDividerHeight(10);
expListView.setChildDivider(getResources().getDrawable(
            android.R.color.white));
于 2015-02-19T10:16:58.887 回答
1

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

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

或使用 xml:

android:childDivider="@color/child_bg_color"
于 2016-05-05T11:37:30.213 回答
0

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

标头.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>

子.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_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>

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

@Override
public View getGroupView(int listPosition, boolean isExpanded, View convertView, 
ViewGroup parent) {
String listTitle = (String) getGroup(listPosition);
String listCount = "(" + getChildrenCount(listPosition) + ")";

if (convertView == null) {
    LayoutInflater layoutInflater = (LayoutInflater) 
this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = layoutInflater.inflate(R.layout.expandable_header, null);
}
View view_hidden = convertView.findViewById(R.id.view_hidden);

if (isExpanded) {
    view_hidden.setVisibility(View.GONE);
} else {
    view_hidden.setVisibility(View.VISIBLE);
}

return convertView;
}

@Override
public View getChildView(int listPosition, final int expandedListPosition,
                     boolean isLastChild, View convertView, ViewGroup parent) {
final Medication medication = (Medication) getChild(listPosition, 
expandedListPosition);
if (convertView == null) {
    LayoutInflater layoutInflater = (LayoutInflater) 
this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = layoutInflater.inflate(R.layout.expandable_item, null);
}

View view_hidden = convertView.findViewById(R.id.view_hidden);
if (isLastChild) {
    view_hidden.setVisibility(View.VISIBLE);
} else {
    view_hidden.setVisibility(View.GONE);
}

return convertView;
}
于 2019-07-25T05:16:54.493 回答
0

如果您想在 ExpandableListView (Header) 的父元素之间有分隔线,并且不想在 children 和 parent 之间有分隔线,这显然是最自然的情况,那么您必须执行以下操作:

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

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

  3. 进入您的 ExpandableListView 适配器方法 public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 像这样管理视图分隔线的状态:示例:

    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"

于 2015-11-07T10:03:19.913 回答
-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" />
于 2013-03-28T10:18:08.653 回答