返回顶部
首页 > 资讯 > 移动开发 >Android仿QQ好友列表实现列表收缩与展开
  • 715
分享到

Android仿QQ好友列表实现列表收缩与展开

列表Android 2022-06-06 09:06:28 715人浏览 安东尼
摘要

ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同的是,它可以有两层:每一层都能够被独立的展开并显示其子项。 好友QQ列表,可以展开

ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同的是,它可以有两层:每一层都能够被独立的展开并显示其子项。
好友QQ列表,可以展开,可以收起,在Android中,以往用的比较多的是listview,虽然可以实现列表的展示,但在某些情况下,我们还是希望用到可以分组并实现收缩的列表,那就要用到android的ExpandableListView,今天研究了一下这个的用法,也参考了很多资料动手写了一个小demo,实现了基本的功能,下面直接上效果图以及源代码~!
本文效果:

一、实现原理
1、首先必须在布局文件中定义一个ExpandableListView
2、其次创建一级条目对应的布局文件group
3、创建二级条目对应的布局文件child
4、加载ExpandableListView组件的Activity必须继承自ExpandableListActivity
二、布局与代码
1、首先在主布局中activity_main.xml


<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:orientation="vertical" > 
  <ExpandableListView 
    android:id="@id/android:list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 
</LinearLayout> 

2、其次在drawable文件夹定义布局一级列表groups.xml


<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android" 
  android:orientation="vertical" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
> 
  <TextView 
    android:id="@+id/textGroup" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:paddingLeft="40px" 
    android:paddingTop="6px" 
    android:paddingBottom="6px" 
    android:textSize="25sp" 
    android:text="No data" 
  /> 
</LinearLayout> 

3、接着在drawable文件夹定义布局二级列表childs.xml


<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android" 
 android:orientation="vertical" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
> 
   <TextView  
    android:id="@+id/textChild" 
  android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:paddingLeft="60px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
    android:textSize="20sp" 
  android:text="No Data" 
/> 
</LinearLayout> 

4、然后就是初始化和使用了


package com.example.expandablelistview; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import android.os.Bundle; 
import android.app.ExpandableListActivity; 
import android.util.DisplayMetrics; 
import android.view.View; 
import android.widget.ExpandableListView; 
import android.widget.SimpleExpandableListAdapter; 
import android.widget.Toast; 
public class MainActivity extends ExpandableListActivity { 
   
  List<Map<String, String>> gruops = new ArrayList<Map<String, String>>(); 
   
  List<List<Map<String, String>>> childs = new ArrayList<List<Map<String, String>>>(); 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    setListData(); 
  } 
   
  public void setListData() { 
    // 创建二个一级条目标题 
    Map<String, String> title_1 = new HashMap<String, String>(); 
    Map<String, String> title_2 = new HashMap<String, String>(); 
    Map<String, String> title_3 = new HashMap<String, String>(); 
    title_1.put("group", "林炳文"); 
    title_2.put("group", "文炳林"); 
    gruops.add(title_1); 
    gruops.add(title_2); 
    // 创建二级条目内容 
    // 内容一 
    Map<String, String> title_1_content_1 = new HashMap<String, String>(); 
    Map<String, String> title_1_content_2 = new HashMap<String, String>(); 
    Map<String, String> title_1_content_3 = new HashMap<String, String>(); 
    title_1_content_1.put("child", "工人"); 
    title_1_content_2.put("child", "学生"); 
    title_1_content_3.put("child", "农民"); 
    List<Map<String, String>> childs_1 = new ArrayList<Map<String, String>>(); 
    childs_1.add(title_1_content_1); 
    childs_1.add(title_1_content_2); 
    childs_1.add(title_1_content_3); 
    // 内容二 
    Map<String, String> title_2_content_1 = new HashMap<String, String>(); 
    Map<String, String> title_2_content_2 = new HashMap<String, String>(); 
    Map<String, String> title_2_content_3 = new HashMap<String, String>(); 
    title_2_content_1.put("child", "猩猩"); 
    title_2_content_2.put("child", "老虎"); 
    title_2_content_3.put("child", "狮子"); 
    List<Map<String, String>> childs_2 = new ArrayList<Map<String, String>>(); 
    childs_2.add(title_2_content_1); 
    childs_2.add(title_2_content_2); 
    childs_2.add(title_2_content_3); 
    childs.add(childs_1); 
    childs.add(childs_2); 
     
    SimpleExpandableListAdapter sela = new SimpleExpandableListAdapter( 
        this, gruops, R.drawable.groups, new String[] { "group" }, 
        new int[] { R.id.textGroup }, childs, R.drawable.childs, 
        new String[] { "child" }, new int[] { R.id.textChild }); 
    // 加入列表 
    setListAdapter(sela); 
  } 
   
  @Override 
  public boolean onChildClick(ExpandableListView parent, View v, 
      int groupPosition, int childPosition, long id) { 
    Toast.makeText( 
        MainActivity.this, 
        "您选择了" 
            + gruops.get(groupPosition).toString() 
            + "子编号" 
            + childs.get(groupPosition).get(childPosition) 
                .toString(), Toast.LENGTH_SHORT).show(); 
    return super.onChildClick(parent, v, groupPosition, childPosition, id); 
  } 
   
  @Override 
  public boolean setSelectedChild(int groupPosition, int childPosition, 
      boolean shouldExpandGroup) { 
    return super.setSelectedChild(groupPosition, childPosition, 
        shouldExpandGroup); 
  } 
   
  @Override 
  public void setSelectedGroup(int groupPosition) { 
    super.setSelectedGroup(groupPosition); 
  } 
} 

5、效果
这是我手机上的效果,点击工人。学生等二级列表时,我手机上会有提示框出现的,但是不知为什么录制下来就是没有。

三、自定义列表图标
上面的图标是系统自己生成的,下面我们要改成自己的
1、更改自定义图标
在drawable文件夹下新建expandablelistview_change.xml


<?xml version = "1.0"  encoding = "utf-8"?> 
<selector  xmlns:android = "http://schemas.android.com/apk/res/android" >    
   <item android:state_expanded = "true"  android:drawable = "@drawable/w2"/>    
   <item android:drawable = "@drawable/w1"/>    
</selector >  

2、修改上面布局Activity.main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:orientation="vertical" > 
  <ExpandableListView 
    android:id="@id/android:list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#f5f5f5" 
    android:cacheColorHint="#f5f5f5" 
    android:groupIndicator="@drawable/expandablelistview_change" /> 
</LinearLayout> 

其实就是加了一句
android:groupIndicator="@drawable/expandablelistview_change" 
下面我们再来看看效果:

 

四、图标放置右边
在上面MainActivity.java的函数setListData()加中:


// 得到屏幕的大小 
DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 
//图标设置在右边 
getExpandableListView().setIndicatorBounds(dm.widthPixels-60, dm.widthPixels); // 设置指示图标的位置 

效果:        

您可能感兴趣的文章:Android开发中记一个SwipeMenuListView侧滑删除错乱的BugAndroid SwipeMenuListView框架详解分析Android使用Item Swipemenulistview实现仿QQ侧滑删除功能Android仿QQ空间底部菜单示例代码Android高仿QQ6.0侧滑删除实例代码Android仿QQ好友列表分组实现增删改及持久化Android仿QQ列表左滑删除操作Android开发中模仿qq列表信息滑动删除功能Android仿QQ左滑删除置顶ListView操作Android开发实现仿QQ消息SwipeMenuListView滑动删除置顶功能【附源码下载】


--结束END--

本文标题: Android仿QQ好友列表实现列表收缩与展开

本文链接: https://lsjlt.com/news/26077.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android仿QQ好友列表实现列表收缩与展开
    ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同的是,它可以有两层:每一层都能够被独立的展开并显示其子项。 好友QQ列表,可以展开...
    99+
    2022-06-06
    列表 Android
  • JS如何模仿QQ好友列表展开、收缩功能
    这篇文章给大家分享的是有关JS如何模仿QQ好友列表展开、收缩功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果图如下所示:js:<script>  wi...
    99+
    2024-04-02
  • Android UI仿QQ好友列表分组悬浮效果
    本文实例为大家分享了Android UI仿QQ好友列表分组悬浮效果的具体代码,供大家参考,具体内容如下 楼主是在平板上測试的。图片略微有点大,大家看看效果就好 接下来贴...
    99+
    2022-06-06
    列表 分组 Android
  • Android仿QQ好友列表分组实现增删改及持久化
    Android自带的控件ExpandableListView实现了分组列表功能,本案例在此基础上进行优化,为此控件添加增删改分组及子项的功能,以及列表数据的持久化。 Demo实...
    99+
    2022-06-06
    列表 持久化 分组 Android
  • Android中使用listview实现qq/微信好友列表
    首先附上运行结果: 如果你没有学过listview请你先看一看基本知识。不想再说的那么细了 太多了。 首先是listview布局 <?xml version...
    99+
    2022-06-06
    列表 listview Android
  • Android Studio实现QQ的注册登录和好友列表跳转
    一、项目概述 本次项目主要包含了注册、登录和好友列表三个界面以及之间相互跳转。其中好友列表界面设计的很详细,有好友头像和消息内容。用户先点击注册按钮进入注册界面,输入完账号和密码后,...
    99+
    2024-04-02
  • vue列表单项展开收缩功能怎么实现
    这篇文章主要讲解了“vue列表单项展开收缩功能怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue列表单项展开收缩功能怎么实现”吧!代码逻辑###template部分:已去除与本文不...
    99+
    2023-07-04
  • Android Studio如何实现QQ的注册登录和好友列表跳转
    这篇文章主要介绍Android Studio如何实现QQ的注册登录和好友列表跳转,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、项目概述本次项目主要包含了注册、登录和好友列表三个界面以及之间相互跳转。其中好友列表界...
    99+
    2023-06-15
  • Android自定义ListView实现仿QQ可拖拽列表功能
    我们大致的思路,其实是这样子的,也是我的设想,我们可以先去实现一个简单的ListView的数据,但是他的Adapter,我们可以用系统封装好的,然后传递进去一个实体类,最后自定...
    99+
    2022-06-06
    列表 listview Android
  • Android仿微信实现下拉列表
     本文要实现微信6.1中点击顶部菜单栏的“+”号按钮时,会弹出一个列表框。这里用的了Activity实现,其实最好的方法可以用ActionBar,不过这货好像只支持3...
    99+
    2022-06-06
    列表 下拉列表 Android
  • web中如何实现列表展开收起效果
    这篇文章主要为大家展示了“web中如何实现列表展开收起效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web中如何实现列表展开收起效果”这篇文章吧。$(&qu...
    99+
    2024-04-02
  • python如何实现列表展开
    这篇文章主要为大家展示了“python如何实现列表展开”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何实现列表展开”这篇文章吧。列表展开>&...
    99+
    2024-04-02
  • Android开发中模仿qq列表信息滑动删除功能
    这个效果的完成主要分为两个部分 自定义view作为listview的列表项 一个view里面包括 显示头像,名字,消息内容等的contentView和滑动才能显示出来的删除,...
    99+
    2022-06-06
    android开发 Android
  • Android实现朋友圈评论回复列表
    本文实例为大家分享了Android实现朋友圈评论回复列表的具体代码,供大家参考,具体内容如下Android实现朋友圈评论回复列表Android实现朋友圈点赞列表Android实现朋友圈多图显示功能正文还是老流程,先来看一下效果图:然后是主要...
    99+
    2023-05-30
    android 朋友圈 评论
  • Android仿微信列表滑动删除 如何实现滑动列表SwipeListView
    接上一篇,本篇主要讲如何实现滑动列表SwipeListView。 上篇完成了滑动控件SwipeItemView,这个控件是一个自定义的ViewGroup,作为列表的一个ite...
    99+
    2022-06-06
    列表 Android
  • angularJS实现表格部分列展开缩起示例代码
    AngularJS 简介 AngularJS 是一个 JavaScript 框架。它可通过 <script> 标签添加到 HTML 页面。 AngularJS 通过 指...
    99+
    2024-04-02
  • Android ExpandableListView展开列表控件使用实例
    你是否觉得手机QQ上的好友列表那个控件非常棒? 不是..... 那也没关系,学多一点知识对自己也有益无害。 那么我们就开始吧。 展开型列表控件, 原名ExpandableLis...
    99+
    2022-06-06
    列表 expandablelistview Android
  • 如何使用python实现展开列表
    这篇文章主要为大家展示了“如何使用python实现展开列表”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用python实现展开列表”这篇文章吧。展开列表将列表内的所有元素,包括子列表,都展...
    99+
    2023-06-27
  • Android实现qq列表式的分类悬浮提示
    效果图: 这种效果的实现这里是采用自定义ExpandableListView,给它设置一个指示布局,在滑动过程中监听当前是否应该悬浮显示分类来实现的。今天抽时间,整理了下代码...
    99+
    2022-06-06
    分类 Android
  • 微信小程序如何实现好友列表字母列表跳转对应位置
    这篇文章将为大家详细讲解有关微信小程序如何实现好友列表字母列表跳转对应位置,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序开发之好友列表字母列表跳转对应位置前言:...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作