您的位置:首页 > 其它

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

2018-03-20 11:52 916 查看
一、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);完!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐