在android应用开发过程中,Listview 是经常使用的数据展现控件,往往用于显示列表形式的数据。

假设只显示数据往往会显得非常单调。非常多时候依据须要定义不同的item 背景选项。比如定义数据的标题。表头或者间隔显示Listview item背景内容。

如图的所看到的的背景内容,如今以一个WeatherDemo为模型分析Listview的相关用法。

实现思路:定义Listview不同的背景,首先要定义好标题与表格内容的两个不同的xml布局文件(city_item.xml,content_item.xml)。

在填充数据的时候往往採用构造一个Adapter数据类型,依据构造的数据类型,推断不同的数据类型,採用LayoutInflater类填充不同的layout文件,从而返回不同的View。

构造WeatherAdapter类继承BaseAdapter并实现相关的接口函数,实现对列表数据的填充。

当中数据的结构比較关键,能够控制相关的标题和内容的关系。

WeatherAdapter类则主要是实现并填充对应的数据。显示相关数据。

程序代码例如以下:

  1. public class WeatherAdapter extends BaseAdapter {
  2.  
  3. // 数据源
  4. private List<HashMap<String, String>> list;
  5. private Context context;
  6. private int[] type;
  7.  
  8. // 构造函数
  9. public WeatherAdapter(Context context, List<HashMap<String, String>> list, int[] type) {
  10. this.context = context;
  11. this.list = list;
  12. this.type = type;
  13. }
  14.  
  15. @Override
  16. public int getCount() {
  17. // TODO Auto-generated method stub
  18. return list.size();
  19. }
  20.  
  21. @Override
  22. public Object getItem(int position) {
  23. // TODO Auto-generated method stub
  24. return list.get(position);
  25. }
  26.  
  27. @Override
  28. public long getItemId(int position) {
  29. // TODO Auto-generated method stub
  30. return position;
  31. }
  32.  
  33. @Override
  34. public View getView(int position, View convertView, ViewGroup parent) {
  35. // TODO Auto-generated method stub
  36. LayoutInflater mInflater = LayoutInflater.from(context);
  37. // 产生一个View
  38. View view = null;
  39. // 依据type不同的数据类型构造不同的View,也能够依据1,2,3天数构造不同的样式
  40. if (type[position] == 0) {
  41. view = mInflater.inflate(R.layout.city_item, null);
  42. // 获取城市名称
  43. String cityName = list.get(position).get("data");
  44. ImageView image = (ImageView) view.findViewById(R.id.weather_image);
  45.  
  46. if (cityName.equals("北京")) {
  47. image.setImageResource(R.drawable.beijing);
  48. } else if (cityName.equals("上海")) {
  49. image.setImageResource(R.drawable.shanghai);
  50.  
  51. } else if (cityName.equals("广州")) {
  52. image.setImageResource(R.drawable.guangzhou);
  53.  
  54. } else if (cityName.equals("深圳")) {
  55. image.setImageResource(R.drawable.shenzhen);
  56.  
  57. }
  58. TextView city = (TextView) view.findViewById(R.id.city);
  59. city.setText(cityName);
  60. } else {
  61. view = mInflater.inflate(R.layout.content_item, null);
  62. // 获取数据
  63. String content = list.get(position).get("data");
  64. // 分离数据
  65. String[] items = content.split(",");
  66.  
  67. TextView weather = (TextView) view.findViewById(R.id.content);
  68. weather.setText(items[0] + "天气: " + items[1] + ";温度: " + items[2]);
  69. TextView date = (TextView) view.findViewById(R.id.date);
  70. date.setText(items[3]);
  71.  
  72. }
  73. return view;
  74. }
  75.  
  76. }

MainActivity.java 

  1. public class MainActivity extends Activity {
  2. @Override
  3. public void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.main);
  6. ListView list = (ListView) findViewById(R.id.list_items);
  7.  
  8. ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
  9.  
  10. // 各个城市的天气
  11. String[] data = { "广州", "今天,晴天,22℃,2014-4-18",
  12. "明天,多云转阵雨,32~23℃,2014-4-19", "后天,阴转多云,33~23℃,2014-4-20", "上海",
  13. "今天,阵雨转雷阵雨,31~25℃,2014-4-18", "明天,雷阵雨转阴,31~24℃,2014-4-19",
  14. "后天,阵雨转多云,32~27℃,2014-4-20", "北京", "今天,中雨转暴雨,32~25℃,2014-4-18",
  15. "明天,暴雨转大到暴雨,29~25℃,2014-4-19", "后天,暴雨转阵雨,29~25℃,2014-4-20",
  16. "深圳", "今天,中雨转暴雨,31~25℃,2014-4-18", "明天,暴雨,29~24℃,2014-4-19",
  17. "后天,大雨转阵雨,28~25℃,2014-4-20" };
  18. // 能够是城市的类型推断或者第几天推断,依据不同的需求构造不同的数组结构适应不同的应用
  19. int[] type = { 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 };
  20. int size = data.length;
  21. for (int i = 0; i < size; i++) {
  22. HashMap<String, String> map = new HashMap<String, String>();
  23. // 依据不同需求能够构造更复杂的数据,眼下之构造一个数据
  24. map.put("data", data[i]);
  25. listItem.add(map);
  26. }
  27. WeatherAdapter listItemAdapter = new WeatherAdapter(this, listItem, type);
  28. list.setAdapter(listItemAdapter);
  29.  
  30. }
  31. }

三个xml布局文件:

city_item.xml

  1. <?xml version="1.0" encoding="utf-8"?
  2.  
  3. >
  4. <!-- items选项 -->
  5. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  6. android:id="@+id/RelativeLayout"
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:background="#9ACD32"
  10. android:paddingBottom="4dip"
  11. android:paddingLeft="12dip"
  12. android:paddingRight="12dip" >
  13.  
  14. <ImageView
  15. android:id="@+id/weather_image"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:layout_alignParentRight="true"
  19. android:paddingTop="4dip"
  20. android:contentDescription="@string/weather_image"/>
  21.  
  22. <TextView
  23. android:id="@+id/city"
  24. android:layout_width="fill_parent"
  25. android:layout_height="wrap_content"
  26. android:paddingTop="6dip"
  27. android:textColor="@color/black"
  28. android:textSize="18sp"/>
  29.  
  30. </RelativeLayout>

content_item.xml

  1. <?xml version="1.0" encoding="utf-8"?
  2.  
  3. >
  4. <!-- items选项 -->
  5. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  6. android:id="@+id/RelativeLayout02"
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:background="@color/white"
  10. android:paddingBottom="4dip"
  11. android:paddingLeft="12dip"
  12. android:paddingRight="12dip" >
  13. <!-- 能够删除
  14. <ImageView
  15. android:id="@+id/image"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:layout_alignParentRight="true"
  19. android:paddingTop="22dip"
  20. android:contentDescription="@string/image" />
  21. -->
  22. <TextView
  23. android:id="@+id/content"
  24. android:layout_width="fill_parent"
  25. android:layout_height="wrap_content"
  26. android:paddingTop="6dip"
  27. android:textSize="15sp"/>
  28.  
  29. <TextView
  30. android:id="@+id/date"
  31. android:layout_width="fill_parent"
  32. android:layout_height="wrap_content"
  33. android:layout_below="@+id/content"
  34. android:paddingRight="20dip"/>
  35.  
  36. </RelativeLayout>

main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6.  
  7. <ListView
  8. android:id="@+id/list_items"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:divider="@color/white"
  12. android:dividerHeight="1dip" >
  13. </ListView>
  14.  
  15. </LinearLayout>

源代码下载地址:http://download.csdn.net/detail/yangweixing10/7214057

android样式布局---&gt;ListView(附上源代码)的更多相关文章

  1. android页面布局(listview填充中间)

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  2. Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式

    Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式 Fragment FragmentManager frag ...

  3. 【Android基础】listview控件的使用(4)-----自定义布局的listview的使用

    前面我介绍了listview控件的不同用法,但是这些用法在实际的开发项目中是不足以满足需求的,因为前面的几种用法只能简单的显示文本信息,而且布局都比较单一,很难做出复杂的结果,在实际的开发项目中,90 ...

  4. Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件

    UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放 ...

  5. Android修行之路------ListView自定义布局

    主布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...

  6. android 开发 实现一个ListView套嵌GirdView的滚动布局

    效果图 实现思维: 首先要处理管理好需要导入的数据,我们这里创建class来处理这些数据并且便于管理它们. 创建一个主activity的布局,里面需要一个ListView控件. 创建一个class继承 ...

  7. 浅谈Android样式开发之布局优化

    引言 今天我们来谈一下Android中布局优化常用的一些手段.官方给出了3种优化方案,分别是</include>.</viewstub>.</merge>标签,下面 ...

  8. 让我们创建屏幕- Android UI布局和控件

    下载LifeCycleTest.zip - 278.9 KB 下载ViewAndLayoutLessons_-_Base.zip - 1.2 MB 下载ViewAndLayoutLessons_-_C ...

  9. Android 样式 (style) 和主题(theme)

    转载:https://gold.xitu.io/post/58441c48c59e0d0056a30bc2 样式和主题 样式是指为 View 或窗口指定外观和格式的属性集合.样式可以指定高度.填充.字 ...

随机推荐

  1. popen()函数详解

    popen()函数 /*============================================ > Copyright (C) 2014 All rights reserved ...

  2. jdk1.6,jdk1.7共存

    当然可以,安装的时候记得选择不同的安装目录,安装好以后,可以在开发工具(如eclipse)中切换不同的编译环境和运行环境.其实只要安装eclipse就自带了jdk1.3-1.6的编译环境了. Mac下 ...

  3. CC++初学者编程教程(6) 配置WindowsXP虚拟机与VC6.0

    1.我们安装需要下列文件. 2.新建一个虚拟机. 3. 选择默认的 Vmware Work Station10.0 4. 我们选择这个WindowsXP镜像. 5. 我们复制一个WindowsXPSP ...

  4. CC++初学者编程教程(5) 安装codeblocks软件开发环境

    Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境. Code::Blocks是开放源码软件.Code::Blocks由纯粹的C++语言开发完成,它使用了蓍名的图形界面库w ...

  5. C++多字节字符转换为宽字符的两种方法

    目前知道有两种方式:可以提供宽字符与ANSI字符之间的转换, 第一种由COM库提供的函数 char*  _com_util::ConvertBSTRToString(BSTR ); BSTR _com ...

  6. wxpython 树形控件全选和取消全选

    #encoding:utf-8 import wx import wx.lib.agw.customtreectrl as CT class MyFrame(wx.Frame): def __init ...

  7. LINQ 图解 LINQ学习第三篇 [转]

    LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作 ...

  8. [UI]抽屉菜单DrawerLayout分析(二)

    继续分析DrawerLayout的手势分发部分 谈到手势分发,这本身就是个好话题,DrawerLayout作为继承自ViewGroup得布局他可以拦截手势也可以分发给子view,也就是在 onInte ...

  9. 从头开始-01.C语言环境测试

    在Mac下编写C程序需要以下几步: 编写代码 a>编译:把C语言编译成0和1 b>工具:clang编译器 c>指令:cc -c 文件名.c      编译成功会生成一个. o目标文件 ...

  10. bootstrap注意事项(二)

    1.内联子标题 在标题内还可以包含 <small> 标签或赋予 .small 类的元素,可以用来标记副标题. <!DOCTYPE html> <html> < ...