ExpandableListView修改group图标

2023-12-16 15:08

本文主要是介绍ExpandableListView修改group图标,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

修改group前面的图标有两种方式:

一、通过修改xml文件中groupIndicator更换为@drawable/**

设置selector

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <!-- 下拉状态 -->
    <item android:state_expanded="false"
          android:drawingCacheQuality="auto"
        android:drawable="@drawable/xiala"/>
    <!-- 收起状态 -->
    <item android:state_expanded="true"
        android:drawingCacheQuality="auto"
     android:drawable="@drawable/shouqi"/>
</selector>

ExpandableListView修改group图标 - 无尘 - 无尘的博客
但是,这种方式做的话,图标不能根据内容调整大小。
二、通过禁用系统自带图标,在group中添加一个ImageView来实现,并通过判断是否有子项来控制是否显示此图标
1、main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=" http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <!-- 禁用系统自带图标android:groupIndicator="@null" -->
<ExpandableListView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:groupIndicator="@null"
    android:id="@+id/mExpandableListView"
    />
</LinearLayout>
2、group.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android=" http://schemas.android.com/apk/res/android"
 android:orientation = "horizontal"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <ImageView
  android:layout_width = "25dip"
  android:layout_height = "25dip"
  android:layout_marginTop="10dip"
  android:id="@+id/mImageView"
  />
 <TextView
  android:id = "@+id/group_tv"
  android:layout_width = "wrap_content"
  android:layout_height = "wrap_content"
  android:paddingLeft = "30px"
  android:paddingBottom = "10px"
  android:textSize = "26sp"/>
</LinearLayout>
3、child.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android=" http://schemas.android.com/apk/res/android"
 android:orientation = "horizontal"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <ImageView
  android:layout_gravity = "center_vertical"
  android:id = "@+id/child_iv"
  android:layout_width = "70px"
  android:layout_height = "70px"
  android:paddingLeft = "30px"
  android:paddingTop = "2px"
  android:paddingBottom = "5px"
  android:src = "@drawable/icon"/>
 <TextView
  android:layout_gravity = "center_vertical"
  android:id = "@+id/child_tv"
  android:layout_width = "fill_parent"
  android:layout_height = "fill_parent"
  android:paddingLeft = "30px"
  android:paddingTop = "10px"
  android:paddingBottom = "5px"
  android:textSize = "30sp"/>
</LinearLayout>
4、activity代码
package test.expandableListView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class TestExpandableListView extends Activity
{
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  ExpandableListView elv = (ExpandableListView)findViewById(R.id.mExpandableListView);
//准备一级列表中显示的数据:2个一级列表,分别显示"group1"和"group2"
  List<Map<String, String>> groups = new ArrayList<Map<String, String>>();
  Map<String, String> group1 = new HashMap<String, String>();
  group1.put("group", "group1");
  Map<String, String> group2 = new HashMap<String, String>();
  group2.put("group", "group2");
  groups.add(group1);
  groups.add(group2);
//准备第一个一级列表中的二级列表数据:两个二级列表,分别显示"childData1"和"childData2"
  List<Map<String, String>> child1 = new ArrayList<Map<String, String>>();
  Map<String, String> child1Data1 = new HashMap<String, String>();
  child1Data1.put("child", "child1Data1");
  Map<String, String> child1Data2 = new HashMap<String, String>();
  child1Data2.put("child", "child1Data2");
  child1.add(child1Data1);
  child1.add(child1Data2);
//准备第二个一级列表中的二级列表数据:一个二级列表,显示"child2Data1"
  List<Map<String, String>> child2 = new ArrayList<Map<String, String>>();
  Map<String, String> child2Data1 = new HashMap<String, String>();
  child2Data1.put("child", "child2Data1");
  child2.add(child2Data1);
//用一个list对象保存所有的二级列表数据
  List<List<Map<String, String>>> childs = new ArrayList<List<Map<String, String>>>();
  childs.add(child1);
  childs.add(child2);
ExpandableAdapter viewAdapter = new ExpandableAdapter(this, groups, childs);
  elv.setAdapter(viewAdapter);
 }
//自定义的ExpandListAdapter
 class ExpandableAdapter extends BaseExpandableListAdapter
 {
  private Context context;
  List<Map<String, String>> groups;
  List<List<Map<String, String>>> childs;
/*
   * 构造函数:
   * 参数1:context对象
   * 参数2:一级列表数据源
   * 参数3:二级列表数据源
   */
  public ExpandableAdapter(Context context, List<Map<String, String>> groups, List<List<Map<String, String>>> childs)
  {
   this.groups = groups;
   this.childs = childs;
   this.context = context;
  }
public Object getChild(int groupPosition, int childPosition)
  {
   return childs.get(groupPosition).get(childPosition);
  }
public long getChildId(int groupPosition, int childPosition)
  {
   return childPosition;
  }
//获取二级列表的View对象
  public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
    ViewGroup parent)
  {
   @SuppressWarnings("unchecked")
   String text = ((Map<String, String>) getChild(groupPosition, childPosition)).get("child");
   LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//获取二级列表对应的布局文件, 并将其各元素设置相应的属性
   LinearLayout linearLayout = (LinearLayout) layoutInflater.inflate(R.layout.child, null);
   TextView tv = (TextView) linearLayout.findViewById(R.id.child_tv);
   tv.setText(text);
   ImageView imageView = (ImageView)linearLayout.findViewById(R.id.child_iv);
   imageView.setImageResource(R.drawable.icon);
return linearLayout;
  }
public int getChildrenCount(int groupPosition)
  {
   return childs.get(groupPosition).size();
  }
public Object getGroup(int groupPosition)
  {
   return groups.get(groupPosition);
  }
public int getGroupCount()
  {
   return groups.size();
  }
public long getGroupId(int groupPosition)
  {
   return groupPosition;
  }
//获取一级列表View对象
  public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
  {
   String text = groups.get(groupPosition).get("group");
   LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//获取一级列表布局文件,设置相应元素属性
   LinearLayout linearLayout = (LinearLayout) layoutInflater.inflate(R.layout.group, null);
   TextView textView = (TextView)linearLayout.findViewById(R.id.group_tv);
   textView.setText(text);
   
   ImageView imageView = (ImageView) linearLayout.findViewById(R.id.mImageView);
   
   if(getChildrenCount(groupPosition) == 0){//该组下没有子项
    imageView.setVisibility(View.GONE);
   }else{
    if(isExpanded == true){//展开状态
     imageView.setImageResource(R.drawable.xiala);
    }else{//收起状态
     imageView.setImageResource(R.drawable.shouqi);
    }
   }
return linearLayout;
  }
public boolean hasStableIds()
  {
   return false;
  }
public boolean isChildSelectable(int groupPosition, int childPosition)
  {
   return false;
  }
}
}
截图:
ExpandableListView修改group图标 - 无尘 - 无尘的博客
 
 

这篇关于ExpandableListView修改group图标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/500903

相关文章

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

如何在运行时修改serialVersionUID

优质博文:IT-BLOG-CN 问题 我正在使用第三方库连接到外部系统,一切运行正常,但突然出现序列化错误 java.io.InvalidClassException: com.essbase.api.base.EssException; local class incompatible: stream classdesc serialVersionUID = 90314637791991

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

android系统源码12 修改默认桌面壁纸--SRO方式

1、aosp12修改默认桌面壁纸 代码路径 :frameworks\base\core\res\res\drawable-nodpi 替换成自己的图片即可,不过需要覆盖所有目录下的图片。 由于是静态修改,则需要make一下,重新编译。 2、方法二Overlay方式 由于上述方法有很大缺点,修改多了之后容易遗忘自己修改哪些文件,为此我们采用另外一种方法,使用Overlay方式。

[环境配置]ubuntu20.04安装后wifi有图标但是搜不到热点解决方法

最近刚入手一台主机,暗影精灵8plus电竞主机,安装ubuntu后wifi怎么都搜不到热点,前后重装系统6次才算解决问题。这个心酸历程只有搞技术人才明白。下面介绍我解决过程。 首先主机到手后是个windows10系统,我用无线网连接了一下,可以正常上网,说明主机有无限网卡且正常。然后我就直接开始安装Ubuntu20.04了,安装成功后发现wifi有图标但是搜不到热点,我想是不是无线网卡驱动有没有

hibernate修改数据库已有的对象【简化操作】

陈科肇 直接上代码: /*** 更新新的数据并并未修改旧的数据* @param oldEntity 数据库存在的实体* @param newEntity 更改后的实体* @throws IllegalAccessException * @throws IllegalArgumentException */public void updateNew(T oldEntity,T newEntity

AI辅助编程里的 Atom Group 的概念和使用

背景 在我们实际的开发当中,一个需求往往会涉及到多个文件修改,而需求也往往有相似性。 举个例子,我经常需要在 auto-coder中需要添加命令行参数,通常是这样的: /coding 添加一个新的命令行参数 --chat_model 默认值为空 实际上这个需求涉及到以下文件列表: /Users/allwefantasy/projects/auto-coder/src/autocoder/auto

SW - 引入第三方dwg图纸后,修改坐标原点

文章目录 SW - 引入第三方dwg图纸后,修改坐标原点概述笔记设置图纸新原点END SW - 引入第三方dwg图纸后,修改坐标原点 概述 在solidworks中引入第三方的dwg格式图纸后,坐标原点大概率都不合适。 全图自动缩放后,引入的图纸离默认的原点位置差很多。 需要自己重新设置原点位置,才能自动缩放后,在工作区中间显示引入的图纸。 笔记 将dwg图纸拖到SW中

linux下修改系统日期与时间

cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

Windows11电脑上自带的画图软件修改照片大小(不裁剪尺寸的情况下)

针对一张图片,有时候上传的图片有大小限制,那么在这种情况下如何修改其大小呢,在不裁剪尺寸的情况下 步骤如下: 1.选定一张图片,右击->打开方式->画图,如下: 第二步:打开图片后,我们可以看到图片的大小为82.1kb,点击上面工具栏的“重设大小和倾斜”进行调整,如下: 第三步:修改水平和垂直的数字,此处我修改为分别都修改为50,然后保存,可以看到大小变成63.5kb,如下: