Android中使用listview实现qq/微信好友列表

首先附上运行结果:

如果你没有学过listview请你先看一看基本知识。不想再说的那么细了 太多了。

首先是listview布局

<?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/lv_view" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="#00000000" android:background="@drawable/back" android:orientation="vertical" > </ListView>

在这里我为什么这样设置

android:cacheColorHint="#00000000" android:background="@drawable/back"

在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性android:background="@drawable/bg",不过不要高兴地太早,当你这么做以后,发现背景是变了,但是当你拖动,或者点击list空白位置的时候发现ListItem都变成黑色的了,破坏了整体效果。

这是什么原因导致的呢?起初我以为是因为我把背景设置成了白色,然后产生色差导致的,后来查阅资料发现,其实这个要从Listview的效果说起,默认的ListItem背景是透明的,而ListView的背景是固定不变的,所以在滚动条滚动的过程中如果实时地去将当前每个Item的显示内容跟背景进行混合运算,所以android系统为了优化这个过程用,就使用了一个叫做android:cacheColorHint的属性,在黑色主题下默认的颜色值是#191919,所以就出现了刚才的画面,有一半是黑色的,那怎么办呢?

如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色,如果你是用图片做背景的话,那也只要将android:cacheColorHint指定为透明(#00000000)就可以了,当然为了美化是要牺牲一些效率的。

由于我们使用的好友列表向比较复杂,一个ImageView两个TextView.,所以要自定义adapter.下面的TextView是我自己创建的TextView为了实现昵称和个性签名的滚动效果。由于占用资源太多 不推荐所有人的昵称和个性签名都滚动哦,只要获得焦点的滚动就好了。我就不改了 交给你了

MyTextView.class

package com.example.friendlist.mytextview; import android.content.Context; import android.util.AttributeSet; import android.widget.TextView; public class MyTextView extends TextView{ public MyTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public MyTextView(Context context) { super(context); // TODO Auto-generated constructor stub } //一直return true @Override public boolean isFocused() { // TODO Auto-generated method stub return true; } }

自定义adapter引用的布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".FirendListActivity" > <ImageView android:id="@+id/iv_picture" android:layout_alignParentLeft="true" android:layout_width="60dp" android:layout_height="60dp" android:src="@drawable/pic1" /> <com.example.friendlist.mytextview.MyTextView android:id="@+id/tv_nickname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/iv_picture" android:maxEms="4" android:singleLine="true" android:ellipsize="marquee" android:layout_centerInParent="true" /> <com.example.friendlist.mytextview.MyTextView android:id="@+id/tv_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerInParent="true" android:maxEms="8" android:singleLine="true" android:ellipsize="marquee" /> </RelativeLayout>

自定义adapter代码

Myadapter.class

package com.example.friendlist.MyAdapter; import java.util.List; import com.example.friendlist.R; import com.example.friendlist.peopleInformation.People_information; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView.FindListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class MyAdapter extends BaseAdapter{ private List<People_information> mData; private Context context; public void setmData(List mData) { this.mData = mData; } public void setContext(Context context) { this.context = context; } //决定了列表item显示的个数 @Override public int getCount() { // TODO Auto-generated method stub return mData.size(); } //根据position获取对应item的内容 @Override public Object getItem(int position) { // TODO Auto-generated method stub return mData.get(position); } //获取对应position的item的ID @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } //创建列表item视图 @Override public View getView(int position, View convertView, ViewGroup arg2) { // TODO Auto-generated method stub View view=View.inflate(context, R.layout.item_fridends, null); //获取item对应的数据对象 People_information people=mData.get(position); //初始化view ImageView iv_picture=(ImageView) view.findViewById(R.id.iv_picture); TextView tv_nickname=(TextView) view.findViewById(R.id.tv_nickname); TextView tv_description=(TextView) view.findViewById(R.id.tv_description); //绑定数据到view iv_picture.setImageResource(people.getDraw_Id()); tv_nickname.setText(people.getNickname()); tv_description.setText(people.getDescription()); return view; } }

我创建了一个个人信息的对象包括头像和昵称,个性签名,为了在加入List里面方便

package com.example.friendlist.peopleInformation; public class People_information { private int draw_Id; private String nickname; private String description; public int getDraw_Id() { return draw_Id; } public void setDraw_Id(int draw_Id) { this.draw_Id = draw_Id; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }

然后就是MainActivity.class了,我把所有人的头像信息,昵称 个性签名都保存在了数组里面。

package com.example.friendlist; import java.util.ArrayList; import java.util.List; import com.example.friendlist.MyAdapter.MyAdapter; import com.example.friendlist.peopleInformation.People_information; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.Toast; public class FirendListActivity extends Activity { private int id[]={R.drawable.pic1,R.drawable.pic2,R.drawable.pic3,R.drawable.pic4 ,R.drawable.pic5,R.drawable.pic6,R.drawable.pic7,R.drawable.pic8,R.drawable.pic9}; private String nickName[]={"宁静","白衣未央","苏染","浮生物语","沫去丶","要想成功必须强大","你是病毒我却不忍用360", "超级无敌噼里啪啦大boss","止不住那流逝的年华"}; private String description[]={"我的人生只是一道直线,转弯就是因为想遇见你","时间,让深的东西越来越深,让浅的东西越来越浅。","弱水三千,我只取一勺,可是到最后我悲惨的发现我的居然是漏勺。", "口上说着释然的人最终心里会疼痛到不能言语","我多想带你去看看以前还没爱上你的我","知道雪为什么是白色吗 因为它忘记了自己曾经的颜色", "好想轰轰烈烈爱她一遍,好想平平淡淡陪他一生","Say bye bye to my love !","只有在他无聊没人玩寂寞空虚的时候才会过来和你说几句话" }; private ListView lv_view; private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.view_listview); lv_view=(ListView) findViewById(R.id.lv_view); myAdapter=new MyAdapter(); myAdapter.setContext(this); myAdapter.setmData(getList()); lv_view.setAdapter(myAdapter); lv_view.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { // TODO Auto-generated method stub People_information people=(People_information) myAdapter.getItem(position); Toast.makeText(FirendListActivity.this, "昵称:"+people.getNickname()+"\n个性签名:"+people.getDescription(), 0).show(); } }); } private List<People_information> getList() { List <People_information>list=new ArrayList<People_information>(); for(int i=0;i<id.length;i++){ People_information people=new People_information(); people.setDraw_Id(id[i]); people.setDescription(description[i]); people.setNickname(nickName[i]); list.add(people); } return list; } }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

时间: 2024-06-16 16:10:20

Android中使用listview实现qq/微信好友列表的相关文章

Android中屏幕显示listview中的item数量

问题描述 Android中屏幕显示listview中的item数量 求大神告知,我如何获取当前屏幕显示出的listview的item数量呢?每个屏幕大小不一,能显示出的数量也是不一样的,有没有方法能够计算的?? 解决方案 刚才那个方法太笨,还可以调用ListView的setOnScrollListener方法,里头复写了一个onScroll方法,方法中的第二个参数就是当前ListView中可见的item数量.下例子中是visibleItemCount: listView.setOnScrollL

图片加载-如何在android中的ListView实现图片的异步加载?

问题描述 如何在android中的ListView实现图片的异步加载? 想要实现对ListView Item 中图片的加载?各位帮忙怎么实现? 解决方案 我封装了一个异步加载类 开放源码并且提供示例代码 这是地址ImageAsyncLoader 解决方案二: Java代码 package cn.wangmeng.test; import java.io.IOException; import java.io.InputStream; import java.lang.ref.SoftRefere

ios 微信 qq sdk-微信SDK可以获取到好友列表么?添加好友呢?QQ查询好友列表和添加好友呢?

问题描述 微信SDK可以获取到好友列表么?添加好友呢?QQ查询好友列表和添加好友呢? 问题如题!凑字(...................................). 解决方案 不能,不会开放给你的 解决方案二: 第二十七篇:QQ好友列表,UITableViewHeaderFooterView用法列表嵌套(QQ好友)QQ好友列表 (UITableViewHeaderFooterView的使用)

android 中的listview item中如何放置一个高度超过item的imageview

问题描述 android 中的listview item中如何放置一个高度超过item的imageview android 中的listview item中如何放置一个高度超过item的imageview. 现在项目有需求,需要在一个listview的item中放置一个imageview,而imageview的高度要 超过这个item,是他看起来只显示imageview的一部分.大伙有思路吗? 解决方案 [android]ListView的item高度调整android给listview的ite

Android中使用GridView实现仿微信图片上传功能(附源代码)

由于工作要求最近在使用GridView完成图片的批量上传功能,我的例子当中包含仿微信图片上传.拍照.本地选择.相片裁剪等功能,如果有需要的朋友可以看一下,希望我的实际经验能对您有所帮助. 直接上图,下面的图片就是点击"加号"后弹出的对话框,通过对话框可以根据自己需求进行相片选择. 项目结构: 下面直接上代码. 整体的布局文件activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/

qq-微信SDK可以获取到好友列表么?添加好友呢?QQ查询好友列表和添加好友呢?

问题描述 微信SDK可以获取到好友列表么?添加好友呢?QQ查询好友列表和添加好友呢? 微信SDK可以获取到好友列表么?添加好友呢?QQ查询好友列表和添加好友呢? 解决方案 第二十七篇:QQ好友列表,UITableViewHeaderFooterView用法列表嵌套(QQ好友)QQ好友列表 (UITableViewHeaderFooterView的使用) 解决方案二: 不可以,只能使用他提供的分享功能 解决方案三: 这是不会共享给开发者的

qt qtreewidget-qt实现一个类似于QQ的好友列表 用Qtreewidget 怎么实现消息小红点提示

问题描述 qt实现一个类似于QQ的好友列表 用Qtreewidget 怎么实现消息小红点提示 如题 我想用一个label显示消息的数量 就是类似于QQ那种未读消息红点显示的那种 item所在的treewidget->setItemwidget()添加一个列为label 可是运行起来却不显示这个label 求教 解决方案 http://blog.csdn.net/shuideyidi/article/details/30619167

腾讯QQ爆重大漏洞 可查任意QQ号好友列表

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断淘宝客 站长团购 云主机 技术大厅 2009年2月8日晚,一名网友在国内最大的个人站长交流论坛-落伍者站长论坛 站长资源版发布一款声称能查询任意QQ的好友列表,并发布了该论坛站长:拒绝游泳的鱼的QQ好友列表.随即引来鲜花评价和站长们的跟帖.更有人编写网页查询版发了出来,到凌晨0:00点,站长们相继发现查询QQ数明显减少,该事件才至此告一段落. "奶牛师兄&qu

Android中使用ListView模拟微信好友功能

效果图: 分析: 1.创建listView 2.创建数据 3.创建适配器 将数据放到呈现数据的容器里面. 将这个容器(带数据)连接适配器. 其实是直接在我们自己写的adapter的getView重载方法中返回连接的view. View view=View.inflate(mContext, com.example.weChatFriends.R.layout.item_friend, null); return view; 4.ListView设置适配器 代码: package fry; imp