ExpandableListView group和child的item间距设置以及多种布局等问题的解决

一、ExpandableListView中group和child的item之间的间距可以通过xml来配置,如下:

<ExpandableListView
    android:id="@+id/listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:cacheColorHint="@color/transparent"
    android:childDivider="@color/transparent"
    android:divider="@color/transparent"
    android:dividerHeight="10dp"
    android:listSelector="@color/transparent"
    android:scrollbars="none"
    android:groupIndicator="@null"
    android:childIndicator="@null">
</ExpandableListView>

这样配置的话,会发现group和child的item之间的间距均为10dp,但是有时候我们需要group和child的item之间的间距设置为不一样的值,这个时候就不能单纯的通过配置xml来解决,解决方法如下:

a、配置expandablelistview

<ExpandableListView
    android:id="@+id/listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:cacheColorHint="@color/transparent"
    android:childDivider="@color/transparent"
    android:divider="@color/transparent"
    android:dividerHeight="0dp"
    android:listSelector="@color/transparent"
    android:scrollbars="none"
    android:groupIndicator="@null"
    android:childIndicator="@null">
</ExpandableListView>

b、配置group layout

<?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="55dp"
    android:minHeight="55dp">

    <RelativeLayout
        android:id="@+id/lay"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_alignParentBottom="true"
        android:background="@drawable/shape_login_edit"
        android:paddingLeft="12dp"
        android:paddingRight="12dp">

        <TextView
            android:id="@+id/key"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="@string/inverter_data_rated_power"
            android:textColor="@color/white"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/value"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:text="5KW"
            android:textColor="@color/white"
            android:textSize="16sp" />

    </RelativeLayout>


</RelativeLayout>

通过控制group item的padding或者margin,来改变group item之间的间距,10dp。

c、配置child layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lay"
    android:layout_width="match_parent"
    android:layout_height="45dp"
    android:background="@drawable/shape_login_edit_all"
    android:minHeight="45dp"
    android:paddingLeft="12dp"
    android:paddingRight="12dp">

    <TextView
        android:id="@+id/key"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:text="@string/inverter_data_rated_power"
        android:textColor="@color/white"
        android:textSize="16sp" />

    <TextView
        android:id="@+id/value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:text="5KW"
        android:textColor="@color/white"
        android:textSize="16sp" />

</RelativeLayout>

通过控制child item的padding或者margin,来改变child item之间的间距,0dp。

二、Expandablelistview 多种布局问题的解决

Listview多布局要求adapter必须实现以下两个函数:

1、getViewTypeCount():该方法返回多少个不同的布局。

2、getItemViewType(int position):根据数据列表的position返回需要展示的layout的对应的type。 type的值必须从0开始。

Expandablelistview多布局同样要求adapter必须实现以下两个函数:

1、getGroupTypeCount()

2、getGroupType(int groupPosition)

package com.invt.imarsphoneexpert.remote.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by xl on 2018/3/15.
 */
public class RemoteInverterInfoAdapter extends BaseExpandableListAdapter {

    private Context mContext;
    private List<NameValueStatus> mList;
    private LayoutInflater mInflater;

    private final int VIEW_TYPE = 2;
    private final int VIEW_TYPE_1 = 0;
    private final int VIEW_TYPE_2 = 1;

    public RemoteInverterInfoAdapter(Context context) {
        this.mContext = context;
        this.mList = new ArrayList<NameValueStatus>();
        this.mInflater = LayoutInflater.from(context);
    }

    public RemoteInverterInfoAdapter(Context context, List<NameValueStatus> list) {
        this.mContext = context;
        this.mList = list;
        this.mInflater = LayoutInflater.from(context);
    }

    @Override
    public int getGroupCount() {
        if (mList != null) {
            return mList.size();
        }
        return 0;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        if (mList != null && mList.get(groupPosition).getList() != null) {
            return mList.get(groupPosition).getList().size();
        }
        return 0;
    }

    @Override
    public Object getGroup(int groupPosition) {
        if (mList != null) {
            return mList.get(groupPosition);
        }
        return null;
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        if (mList != null && mList.get(groupPosition).getList() != null) {
            return mList.get(groupPosition).getList().get(childPosition);
        }
        return null;
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }

    @Override
    public int getGroupType(int groupPosition) {
        if (groupPosition == 3 || groupPosition == 4) {
            return VIEW_TYPE_2;
        }
        return VIEW_TYPE_1;
    }

    @Override
    public int getGroupTypeCount() {
        return VIEW_TYPE;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        GroupViewHold group = null;
        int type = getGroupType(groupPosition);
        if (convertView == null) {
            group = new GroupViewHold();
            switch (type) {
                case VIEW_TYPE_1:
                    convertView = mInflater.inflate(R.layout.row_inverter_info1, null);
                    group.value = (TextView) convertView.findViewById(R.id.value);
                    break;
                case VIEW_TYPE_2:
                    convertView = mInflater.inflate(R.layout.row_inverter_info2, null);
                    group.indicator = (ImageView) convertView.findViewById(R.id.img);
                    break;
            }
            group.key = (TextView) convertView.findViewById(R.id.key);
            group.lay = (RelativeLayout) convertView.findViewById(R.id.lay);
            //设置tag
            convertView.setTag(group);
        } else {
            group = (GroupViewHold) convertView.getTag();
        }
        //设置控件
        group.key.setText(mList.get(groupPosition).getName());
        if (type == VIEW_TYPE_1) {
            group.value.setText(mList.get(groupPosition).getValue());
        } else {
            if (isExpanded) {
                group.indicator.setImageResource(R.drawable.remote_close);
                group.lay.setBackgroundResource(R.drawable.shape_login_edit_up);
            } else {
                group.indicator.setImageResource(R.drawable.remote_open);
                group.lay.setBackgroundResource(R.drawable.shape_login_edit);
            }
        }
        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        ChildViewHold child = null;
        if (convertView == null) {
            child = new ChildViewHold();
            convertView = mInflater.inflate(R.layout.row_inverter_info_item, null);
            //查找控件
            child.key = (TextView) convertView.findViewById(R.id.key);
            child.value = (TextView) convertView.findViewById(R.id.value);
            child.lay = (RelativeLayout) convertView.findViewById(R.id.lay);
            //设置tag
            convertView.setTag(child);
        } else {
            child = (ChildViewHold) convertView.getTag();
        }
        //设置控件
        if (getGroupType(groupPosition) == VIEW_TYPE_2) {
            child.key.setText(mList.get(groupPosition).getList().get(childPosition).getName());
            child.value.setText(mList.get(groupPosition).getList().get(childPosition).getValue());
        }
        if (childPosition == mList.get(groupPosition).getList().size() - 1) {
            child.lay.setBackgroundResource(R.drawable.shape_login_edit_down);
        }
        return convertView;
    }

    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }

    static class GroupViewHold {
        private RelativeLayout lay;
        private ImageView indicator;
        private TextView key;
        private TextView value;
    }

    static class ChildViewHold {
        private RelativeLayout lay;
        private TextView key;
        private TextView value;
    }

    /**
     * 更新列表
     *
     * @param list
     */
    public void updateList(List<NameValueStatus> list) {
        this.mList.clear();
        this.mList.addAll(list);
        this.notifyDataSetChanged();
    }

    /**
     * 获取列表
     *
     * @return
     */
    public List<NameValueStatus> getList() {
        return mList;
    }

    /**
     * 刷新
     */
    public void updateList() {
        this.notifyDataSetChanged();
    }
}

三、listview和expandablelistview头部设置

头部lay_inverter_head1

<?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="150dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:orientation="horizontal"
    android:weightSum="5">

    ……

</LinearLayout>

设置头部

//设置listView头部
mViewHeader = View.inflate(mActivity, R.layout.lay_inverter_head1, null);
mListView.addHeaderView(mViewHeader);
完!!!


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值