android样式布局--->ListView(附上源代码)

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

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

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

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

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

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

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

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

程序代码例如以下:

public class WeatherAdapter extends BaseAdapter {

	// 数据源
	private List<HashMap<String, String>> list;
	private Context context;
	private int[] type;

	// 构造函数
	public WeatherAdapter(Context context, List<HashMap<String, String>> list, int[] type) {
		this.context = context;
		this.list = list;
		this.type = type;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return list.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		LayoutInflater mInflater = LayoutInflater.from(context);
		// 产生一个View
		View view = null;
		// 依据type不同的数据类型构造不同的View,也能够依据1,2,3天数构造不同的样式
		if (type[position] == 0) {
			view = mInflater.inflate(R.layout.city_item, null);
			// 获取城市名称
			String cityName = list.get(position).get("data");
			ImageView image = (ImageView) view.findViewById(R.id.weather_image);

			if (cityName.equals("北京")) {
				image.setImageResource(R.drawable.beijing);
			} else if (cityName.equals("上海")) {
				image.setImageResource(R.drawable.shanghai);

			} else if (cityName.equals("广州")) {
				image.setImageResource(R.drawable.guangzhou);

			} else if (cityName.equals("深圳")) {
				image.setImageResource(R.drawable.shenzhen);

			}
			TextView city = (TextView) view.findViewById(R.id.city);
			city.setText(cityName);
		} else {
			view = mInflater.inflate(R.layout.content_item, null);
			// 获取数据
			String content = list.get(position).get("data");
			// 分离数据
			String[] items = content.split(",");

			TextView weather = (TextView) view.findViewById(R.id.content);
			weather.setText(items[0] + "天气: " + items[1] + ";温度:  " + items[2]);
			TextView date = (TextView) view.findViewById(R.id.date);
			date.setText(items[3]);

		}
		return view;
	}

}

MainActivity.java 

public class MainActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		ListView list = (ListView) findViewById(R.id.list_items);

		ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();

		// 各个城市的天气
		String[] data = { "广州", "今天,晴天,22℃,2014-4-18",
				"明天,多云转阵雨,32~23℃,2014-4-19", "后天,阴转多云,33~23℃,2014-4-20", "上海",
				"今天,阵雨转雷阵雨,31~25℃,2014-4-18", "明天,雷阵雨转阴,31~24℃,2014-4-19",
				"后天,阵雨转多云,32~27℃,2014-4-20", "北京", "今天,中雨转暴雨,32~25℃,2014-4-18",
				"明天,暴雨转大到暴雨,29~25℃,2014-4-19", "后天,暴雨转阵雨,29~25℃,2014-4-20",
				"深圳", "今天,中雨转暴雨,31~25℃,2014-4-18", "明天,暴雨,29~24℃,2014-4-19",
				"后天,大雨转阵雨,28~25℃,2014-4-20" };
		// 能够是城市的类型推断或者第几天推断,依据不同的需求构造不同的数组结构适应不同的应用
		int[] type = { 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 };
		int size = data.length;
		for (int i = 0; i < size; i++) {
			HashMap<String, String> map = new HashMap<String, String>();
			// 依据不同需求能够构造更复杂的数据,眼下之构造一个数据
			map.put("data", data[i]);
			listItem.add(map);
		}
		WeatherAdapter listItemAdapter = new WeatherAdapter(this, listItem, type);
		list.setAdapter(listItemAdapter);

	}
}

三个xml布局文件:

city_item.xml

<?xml version="1.0" encoding="utf-8"?

>
<!-- items选项 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#9ACD32"
    android:paddingBottom="4dip"
    android:paddingLeft="12dip"
    android:paddingRight="12dip" >

    <ImageView
        android:id="@+id/weather_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:paddingTop="4dip"
        android:contentDescription="@string/weather_image"/>

    <TextView
        android:id="@+id/city"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="6dip"
        android:textColor="@color/black"
        android:textSize="18sp"/>

</RelativeLayout>

content_item.xml

<?xml version="1.0" encoding="utf-8"?

>
<!-- items选项 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout02"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:paddingBottom="4dip"
    android:paddingLeft="12dip"
    android:paddingRight="12dip" >
<!-- 能够删除
    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:paddingTop="22dip"
        android:contentDescription="@string/image" />
 -->
    <TextView
        android:id="@+id/content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="6dip"
        android:textSize="15sp"/>

    <TextView
        android:id="@+id/date"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/content"
        android:paddingRight="20dip"/>

</RelativeLayout>

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/list_items"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:divider="@color/white"
        android:dividerHeight="1dip" >
    </ListView>

</LinearLayout>

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

时间: 2024-10-22 13:20:55

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

Android 复杂布局的ListView优化思路

项目中用到一个内部复杂布局的listview,每个item中都有动态的子item,相当于listview的item中还有listview的样式.刚开始做的思路是,用一个listview,然后item中加个LinearLayout,然后代码动态的生成子item view 添加在其中,希望这样的表述大家能明白,按照这样的思路做好之后发现快速滑动的时候,一卡一顿,实在不能直视,在配置低点的机器上更是不能看. 但是因为赶进度一直没有优化,现在回头看下,虽然已经用了viewHolder但是listview

Android 样式布局

一.样式布局 首先,先看下面这段样式布局代码,这里称在xml控件上添加属性为内联(仅限于本篇博文这样称呼): <Button android:id="@+id/crime_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="16dp" android:layout

Android开发之自定义Spinner样式的效果实现(源代码实现)

android系统自带的Spinner样式是远远满足不了我们实际开发过程中对Spinner UI风格的要求,因此我们肯定需要为了切合整个应用的风格,修改我们的Spinner样式.系统给我们提供了两种常见的修改方式,一个是用XML方式静态,另一个就是Java代码动态来修改啦,我们这篇文章呢主要就是介绍如何动态修改Spinner的样式.我的实现方法呢,是自己构造一个SpinnerAdapter,继承来自ArrayAdapter,重写getDropDownView(),getView()这两个方法就好

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

UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放其他View和ViewGroup对象的布局容器! Android为我们提供了View和ViewGroup的两个子类的集合,提供常用的一些输入控件(比如按钮,图片和文本域等)和各种各样的布局模式(比如线程布局,相对布局,绝对布局,帧布局,表格布局等). 用户界面布局 在你APP软件上的,用户界面上显示

Android开发之给ListView设置布局动画效果

1.通过JAVA代码添加,资源文件基本上不修改 XML文件,只添加了一个ListView,就不贴XML文件的代码了. java代码: 1 public class MainActivity extends Activity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.act

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

转载:https://gold.xitu.io/post/58441c48c59e0d0056a30bc2 样式和主题 样式是指为 View 或窗口指定外观和格式的属性集合.样式可以指定高度.填充.字体颜色.字号.背景色等许多属性. 样式是在与指定布局的 XML 不同的 XML 资源中进行定义. Android 中的样式与网页设计中层叠样式表的原理类似 - 您可以通过它将设计与内容分离. 例如,通过使用样式,您可以将以下布局 XML: <TextView android:layout_width

android layout布局属性

参考:http://blog.csdn.net/msmile_my/article/details/9018775 第一类:属性值 true或者 false           android:layout_centerHrizontal 水平居中     android:layout_centerVertical 垂直居中     android:layout_centerInparent 相对于父元素完全居中     android:layout_alignParentBottom 贴紧父元

Android RecyclerView: Super Fast ListView 超级快速的Lis

Android RecyclerView: Super Fast ListView 原文来自我的微信公众号: longkai_1991 先上图,看效果: 前几天刚release完公司的一个项目,有了点时间,于是就想找一些有意思的东西学习一下,顺便运用在项目之中.看到iOS的同事们在谈论iOS8的xx特性时,我突然也有想在公司项目的下一个版本中添加Android L版本的特性. 六月底的时候收看Google io时,当时对Android新的设计语言,Material Design,没什么太大的好感

【Android】Android软件开发之ListView 详解

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://xys289187120.blog.51cto.com/3361352/657171 ListView的使用方法 ListView是Android软件开发中非常重要组件之一,基本上是个软件基本都会使用ListView ,今天我通过一个demo来教大家怎么样使用ListView组件 绘制出漂亮的列表,说道ListView就不得不说Adapter适配器,因为只有通过Adapter才可