欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-06-02 22:15:40
首先附上运行结果: 如果你没有学过listview请你先看一看基本知识。不想再说的那么细了 太多了。 首先是listview布局

首先附上运行结果:

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; 
 } 

} 

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