ExpandableListView group和child的item间距设置以及多种布局等问题的解决
2018-03-20 11:52
916 查看
一、ExpandableListView中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);完!!!
<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);完!!!
相关文章推荐
- ExpandableListView 展开childView后,childView及GroupView布局错乱的问题
- 求助 ExpandableListView group的item有间距child间隔不变
- 求助 ExpandableListView group的item有间距child间隔不变
- Android ExpandableListView group的item有间距child间隔不变
- android listview的item布局中含有button,不会响应listview的onitemclick监听 以及 onitemlongclick监听问题解决
- listview中的item布局跟标签宽高设置失效的问题
- <已解决>使用selector设置Button按下松开的样式以及 <item> tag requires a 'drawable' attribute or child tag defining a drawable 报错
- 解决listview的item为自定义viewgroup时,viewgroup子view press时,整个viewgroup都被按下的问题
- ExpandableListView 功能界面布局探究之三(没有child的下拉列表,group不展开的实现)
- ListView的item可能出现不同布局造成ListView的item数据混乱问题解决
- 解决 ExpandableListView .onChildItemLongClick()
- ViewPager禁止滑动,设置页片间距,设置当前显示的页面,缓存个数,以及解决嵌套ViewPager左右滑动冲突问题
- 解决ListView的item含有RadioGroup,滑动错乱问题,从国外大神博借鉴过来的
- Listview或者ExpandableListView以及GridView与ScrollView冲突问题的解决
- 解决 ListView的Item里TextView设置超链接后ListView 的OnItemClick失效的问题
- Android布局问题--ExpandableListView的ChildView布局不能居中的问题
- android 关于listview item设置高度的问题解决方法
- Android ListView的item背景色设置以及item点击无响应等相关问题
- Android 解决ListView插入其他布局条目(item或广告)删掉数据的问题
- Listview点击事件失效问题解决以及每个Item 子控件获取focus