8

我有可扩展列表视图,我想在组项目之间添加填充(或边距),我margin-botton在组项目上使用过,它可以工作,但现在它也适用于组项目及其子项,我想在组项目之间保留空间,而不是在一个组项目和它的孩子之间,我是这样工作的:

主xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="#FFFFFF">

    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:typeface="serif"
        android:textSize="25dip"
        android:textColor="#025f7c"
        android:text="@string/tv_allAddresses"
        android:layout_gravity="center"
        android:layout_marginTop="20dip"
        android:layout_marginBottom="25dip"/>

    <ExpandableListView
        android:id="@+id/elv_all_addresses_addresses"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:padding="10dip">
    </ExpandableListView>

</LinearLayout>

组 xml

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

    <TextView
        android:id="@+id/tv_all_address_group_groupName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="30dip"
        android:textColor="#000000"
        android:textSize="20dip"
        android:typeface="serif" />

</LinearLayout>

子xml

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

    <TextView
        android:id="@+id/tv_all_address_child_label"
        android:paddingLeft="50dip"
        android:typeface="serif"
        android:textSize="15dip"
        android:textColor="@color/BlueViolet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tv_all_address_child_value"
        android:textColor="#000000"
        android:layout_marginLeft="10dip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
4

6 回答 6

6

因为您使用adapter的是从扩展而来的,BaseExpandableListAdapter所以您可以通过在组未扩展时将填充设置为组项来以编程方式设置填充,然后在组扩展时删除填充,并且为每个组将填充设置为其中的最后一个子项。

将填充设置为最后一个孩子

public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
if (childPosition == groups.get(groupPosition).getChilds().size() - 1) {
            convertView.setPadding(0, 0, 0, 20);
        } else
            convertView.setPadding(0, 0, 0, 0);
        return convertView;
}

扩展时将填充设置为组项目

public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
    if (isExpanded)
            convertView.setPadding(0, 0, 0, 0);
        else
            convertView.setPadding(0, 0, 0, 20);
        return convertView;
    }

笔记

我假设您正在为您的组和您的孩子使用 arraylist,您可以groups.get(groupPosition).getChilds().size() - 1根据您的结构将其替换为您的组的大小

于 2013-02-10T21:47:03.477 回答
4

如果您正在寻找更好的选择,只需添加

expandablelsv.setDividerHeight();

之后groupchild indicator它在我的情况下完全正常,试一试

于 2015-05-23T18:14:38.787 回答
2

检查孩子是否是最后一个并在那里添加填充

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

    if (isLastChild) {
        convertView.setPadding(0, 0, 0, 30);
    }

     return convertView; 
}
于 2015-10-05T03:59:29.290 回答
1

这两个属性有助于给空间

android:divider="@android:color/transparent"
android:dividerHeight="8dp"
于 2019-08-18T14:37:46.247 回答
0

我遇到了同样的问题,所以我想出了一个幼稚的解决方案。我所做的是在可扩展列表视图的父布局文件和子布局文件中添加了具有相同属性的线性布局。当单击一个组时,我使父布局文件的“线性布局”不可见,我的工作就完成了。

组布局文件

<TextView
        android:id="@+id/expandable_faqparent_id"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_margin="2dp"
        android:layout_marginBottom="30dp"
        android:background="#ffffff"
        android:gravity="center"
        android:text="hello this is dummy text"
        android:textSize="20dp"
        android:textStyle="bold" />
<LinearLayout
    android:id="@+id/linear_parent_faq"
    android:layout_width="match_parent"
    android:layout_height="10dp"
    android:background="#cfd8dc"
    android:layout_weight="0.06"
    android:orientation="vertical">
</LinearLayout>

子布局文件

<TextView
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:id="@+id/expandable_faq_child_id"
    android:text="DUMMY PARENT"
    android:background="#ffffff"
    android:gravity="center"
    android:elevation="2dp"/>
<LinearLayout
    android:id="@+id/linearfaq"
    android:layout_width="match_parent"
    android:layout_height="10dp"
    android:background="#cfd8dc"
    android:orientation="vertical">
</LinearLayout>

单击任何组时隐藏线性布局将此行添加到适配器类的 addChildView 方法中

lv.setVisibility(View.INVISIBLE);

这里lv包含线性布局的id

linear_parent_faq

组布局文件。

于 2016-02-16T19:06:08.773 回答
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:12:58.443 回答