`

Android学习08-----Android中的基本控件(下)(1)_滚动视图:ScrollView和列表显示:ListView

阅读更多

从这篇开始,总结一下 Android 中的一些复杂点的常用组件。

 

滚动视图: ScrollView

滚动视图的使用形式与各个布局管理器的操作形式类似,唯一不同的是,所有的布局管理器之中,可以包含多个组件,而滚动视图里只能有一个组件,所以所谓的视图指的就是提供一个专门的容器,这个容器里面可以装下多于屏幕宽度的组件,而后采用拖拽的方式显示所有 ScrollView 中的组件。

main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
	android:id="@+id/myscroll" 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">

	<LinearLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="vertical" 
		android:id="@+id/mylinear"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent">
	</LinearLayout>
</ScrollView>

 

ScrollViewActivity.java:

package com.iflytek.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

public class ScrollViewActivity extends Activity {

	private String data[] = { "xdwang", "xdwangiflytek.iteye.com", "王旭东",
			"Java、C#、Android", "790419465@qq.com", "xdwangiflytek@gmail.com",
			"13956027313", "工作地点:安徽合肥", "家乡:安徽滁州","格言:打倒小日本","钓鱼岛属于中国" };

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		LinearLayout layout = (LinearLayout) super.findViewById(R.id.mylinear); // 取得组件
		LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
				ViewGroup.LayoutParams.FILL_PARENT,
				ViewGroup.LayoutParams.WRAP_CONTENT); // 定义布局参数
		for (int x = 0; x < this.data.length; x++) { // 通过循环方式将以上的信息通过Button组件进行封装
			Button but = new Button(this);
			but.setText(this.data[x]); // 设置显示文字
			layout.addView(but, param); // 增加组件
		}
	}
}

 

列表显示: ListView

1 、基本功能实现 Demo

package com.iflytkek.activity;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListView01Activity extends Activity {
	
	private String data[] = { "xdwang", "xdwangiflytek.iteye.com", "王旭东",
			"Java、C#、Android", "790419465@qq.com", "xdwangiflytek@gmail.com",
			"13956027313", "工作地点:安徽合肥", "家乡:安徽滁州","格言:打倒小日本","钓鱼岛属于中国" };
	
	private ListView listView = null; // 定义ListView组件
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		this.listView = new ListView(this); // 实例化组件
		//simple_list_item_1,显示分风格
		this.listView.setAdapter(new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, this.data)); // 为ListView组件设置内容
		super.setContentView(this.listView) ;	// 显示组件
    }
}
 

2、SimpleAdapter
SimpleAdapter类主要功能是将List集合的数据转换为ListView可以支持的数据,而要想实现这种转换,首先需要定义一个数据的显示模版(专门定义一个布局管理器,基本上都是表格布局),在这个模版中可以定义ListView每行需要显示的所有组件,而在需要转换的List集合里保存的是多条Map集合的数据,这些Map集合里面保存着一些具体的要显示的信息,即:模版中每一个组件的ID实际上就相当于规定了里面保存的Map集合的key,而模版中每个组件的显示内容,则有Map保存的Value决定。这种操作也是ListView中操作最多的一种。
Layout/mian.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" >

	<TextView 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:textSize="25px"
		android:gravity="center_horizontal"
		android:text="王旭东信息列表" />
	
	<ListView
		android:id="@+id/datalist"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"/>

</LinearLayout>
 

Layout/data_list.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
	<TableRow>
		<ImageView
			android:id="@+id/icon"
			android:layout_height="wrap_content"
			android:layout_width="wrap_content"
			android:src="@drawable/file_icon"/>
		<TextView 
			android:id="@+id/_id"
			android:textSize="15px"
			android:gravity="center_vertical"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
		<!-- 这边的id使用下划线的主要目的是为了以后在使用数据存储的时候SQLite数据库规定好必须使用一个下划线的id表示主键 -->
		<TextView 
			android:id="@+id/name"
			android:textSize="15px"
			android:gravity="center_vertical"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
	</TableRow>
</TableLayout>

 

SimpleAdapterActivity.java:

package com.iflytek.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class SimpleAdapterActivity extends Activity {

	// 准备出若干个信息而这些信息以后将通过程序加入到内嵌的线性布局文件之中
	private String data[][] = { { "001", "xdwang" },
			{ "002", "xdwangiflytek.iteye.com" }, { "003", "王旭东" },
			{ "004", "Java、C#、Android" }, { "005", "790419465@qq.com" },
			{ "006", "xdwangiflytek@gmail.com" }, { "007", "13956027313" },
			{ "008", "工作地点:安徽合肥" }, { "009", "家乡:安徽滁州" },
			{ "0010", "格言:打倒小日本" }, { "0011", "钓鱼岛属于中国" }
			};
	private ListView datalist = null; // 定义ListView组件
	private List<Map<String, String>> listMaps = new ArrayList<Map<String, String>>(); // 定义显示的内容包装
	private SimpleAdapter simpleAdapter = null; // 进行数据的转换操作

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.datalist = (ListView) super.findViewById(R.id.datalist); // 取得组件
		for (int x = 0; x < this.data.length; x++) {
			Map<String, String> map = new HashMap<String, String>(); // 定义Map集合,保存每一行数据
			map.put("_id", this.data[x][0]); // 与data_list.xml中的TextView组加匹配
			map.put("name", this.data[x][1]); // 与data_list.xml中的TextView组加匹配
			this.listMaps.add(map); // 保存了所有的数据行
		}
		this.simpleAdapter = new SimpleAdapter(this, this.listMaps,
				R.layout.data_list, new String[] { "_id", "name" } // Map中的key的名称
				, new int[] { R.id._id, R.id.name }); // 是data_list.xml中定义的组件的资源ID
		this.datalist.setAdapter(this.simpleAdapter);
	}
}
 

3、使用ListActivity
main.xml和data_list.xml和上面的不变
ListView04Activity.java:

package com.iflytek.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.SimpleAdapter;

public class ListView04Activity extends ListActivity {// 继承了ListActivity类

	private String data[][] = { { "001", "xdwang" },
			{ "002", "xdwangiflytek.iteye.com" }, { "003", "王旭东" },
			{ "004", "Java、C#、Android" }, { "005", "790419465@qq.com" },
			{ "006", "xdwangiflytek@gmail.com" }, { "007", "13956027313" },
			{ "008", "工作地点:安徽合肥" }, { "009", "家乡:安徽滁州" },
			{ "0010", "格言:打倒小日本" }, { "0011", "钓鱼岛属于中国" } };

	private List<Map<String, String>> list = new ArrayList<Map<String, String>>(); // 定义显示的内容包装
	private SimpleAdapter simpleAdapter = null; // 进行数据的转换操作

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		for (int x = 0; x < this.data.length; x++) {
			Map<String, String> map = new HashMap<String, String>(); // 定义Map集合,保存每一行数据
			map.put("_id", this.data[x][0]); // 与data_list.xml中的TextView组加匹配
			map.put("name", this.data[x][1]); // 与data_list.xml中的TextView组加匹配
			this.list.add(map); // 保存了所有的数据行
		}
		this.simpleAdapter = new SimpleAdapter(this, this.list,
				R.layout.data_list, new String[] { "_id", "name" } // Map中的key的名称
				, new int[] { R.id._id, R.id.name }); // 是data_list.xml中定义的组件的资源ID
		super.setListAdapter(this.simpleAdapter); // 设置列表显示
	}
}
 

此时没有使用到main.xml文件,而只是利用了data_list.xml文件进行显示,虽然说可以完成列表的功能,但是这种显示风格并不特别实用,没有之前定义ListView组件,而后利用Activity程序设置内容显示方便。

4、事件处理
main.xml和data_list.xml和上面的不变
ListView05Activity.java

package com.iflytek.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class ListView05Activity extends Activity {

	private String data[][] = { { "001", "xdwang" },
			{ "002", "xdwangiflytek.iteye.com" }, { "003", "王旭东" },
			{ "004", "Java、C#、Android" }, { "005", "790419465@qq.com" },
			{ "006", "xdwangiflytek@gmail.com" }, { "007", "13956027313" },
			{ "008", "工作地点:安徽合肥" }, { "009", "家乡:安徽滁州" },
			{ "0010", "格言:打倒小日本" }, { "0011", "钓鱼岛属于中国" } };

	private ListView datalist = null; // 定义ListView组件
	private List<Map<String, String>> list = new ArrayList<Map<String, String>>(); // 定义显示的内容包装
	private SimpleAdapter simpleAdapter = null; // 进行数据的转换操作
	private TextView info = null;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.datalist = (ListView) super.findViewById(R.id.datalist); // 取得组件
		this.info = (TextView) super.findViewById(R.id.info); // 取得组件
		for (int x = 0; x < this.data.length; x++) {
			Map<String, String> map = new HashMap<String, String>(); // 定义Map集合,保存每一行数据
			map.put("_id", this.data[x][0]); // 与data_list.xml中的TextView组加匹配
			map.put("name", this.data[x][1]); // 与data_list.xml中的TextView组加匹配
			this.list.add(map); // 保存了所有的数据行
		}
		this.simpleAdapter = new SimpleAdapter(this, this.list,
				R.layout.data_list, new String[] { "_id", "name" } // Map中的key的名称
				, new int[] { R.id._id, R.id.name }); // 是data_list.xml中定义的组件的资源ID
		this.datalist.setAdapter(this.simpleAdapter);
		this.datalist.setOnItemClickListener(new OnItemClickListenerImpl()); // 单击选项
	}

	private class OnItemClickListenerImpl implements OnItemClickListener {

		@SuppressWarnings("unchecked")
		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			Map<String, String> map = (Map<String, String>) ListView05Activity.this.simpleAdapter
					.getItem(position);
			String _id = map.get("_id");
			String name = map.get("name");
			ListView05Activity.this.info.setText("选中的数据项ID是:" + _id + ",名称是:"
					+ name);
		}
	}
}
 

5、复杂显示
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" >

   	<TextView 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:textSize="25px"
		android:gravity="center_horizontal"
		android:text="学习视频列表" />
   	
	<ListView
		android:id="@+id/datalist" 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"/>

</LinearLayout>
 

data_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
	<ImageView
		android:id="@+id/pic"
		android:layout_height="wrap_content"
		android:layout_width="wrap_content"
		android:padding="3px"/>
	<LinearLayout 
		xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="vertical"
		android:layout_width="150px"
		android:layout_height="wrap_content"
		android:gravity="left">
		<TextView 
			android:id="@+id/title"
			android:textSize="16px"
			android:padding="3px"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
		<TextView 
			android:id="@+id/author"
			android:padding="3px"
			android:textSize="10px"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
	</LinearLayout>
	<LinearLayout 
		xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="vertical"
		android:layout_width="200px"
		android:layout_height="wrap_content"
		android:gravity="left">
		<TextView 
			android:id="@+id/type"
			android:padding="3px"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
		<ImageView 
			android:id="@+id/score"
			android:padding="3px"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
	</LinearLayout>
</LinearLayout>

 

ListView03Activity.java:

package com.iflytek.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class ListView03Activity extends Activity {

	private int pic[] = new int[] { R.drawable.pic_oracle,
			R.drawable.pic_javase, R.drawable.pic_javaweb,
			R.drawable.pic_javaee, R.drawable.pic_android, R.drawable.pic_game };
	private String data[][] = new String[][] { { "Oracle", "科大" },
			{ "Java SE", "小李" }, { "Java WEB", "花花" },
			{ "Java EE", "小王" }, { "Android", "乐乐" },
			{ "Java 游戏", "小三" } };

	private ListView datalist = null; // 定义ListView组件
	private List<Map<String, String>> list = new ArrayList<Map<String, String>>(); // 定义显示的内容包装
	private SimpleAdapter simpleAdapter = null; // 进行数据的转换操作

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.datalist = (ListView) super.findViewById(R.id.datalist); // 取得组件
		for (int x = 0; x < this.data.length; x++) {
			Map<String, String> map = new HashMap<String, String>(); // 定义Map集合,保存每一行数据
			map.put("pic", String.valueOf(this.pic[x])); // 与data_list.xml中的TextView组加匹配
			map.put("title", this.data[x][0]); // 与data_list.xml中的TextView组加匹配
			map.put("author", this.data[x][1]); // 与data_list.xml中的TextView组加匹配
			map.put("type", "免费");
			map.put("score", String.valueOf(R.drawable.start_05));
			this.list.add(map); // 保存了所有的数据行
		}
		this.simpleAdapter = new SimpleAdapter(this, this.list,
				R.layout.data_list, new String[] { "pic", "title", "author",
						"type", "score" } // Map中的key的名称
				, new int[] { R.id.pic, R.id.title, R.id.author, R.id.type,
						R.id.score }); // 是data_list.xml中定义的组件的资源ID
		this.datalist.setAdapter(this.simpleAdapter);
	}
}
 

 

分享到:
评论

相关推荐

    Android项目下拉刷新控件(ListView好ScrollView版).rar

    本资源为Android项目中的下拉刷新控件,支持ListView和ScrollView两种视图。该控件具有高度可定制性,可根据您的需求进行二次开发。 该下拉刷新控件采用流畅的动画效果,提供轻松的用户体验。当用户下拉刷新时,...

    cocos_creator_proj_base:cocos creator项目基础类库,包括套接字,http网络连接,资源加载与管理,ui加载与管理,热更新实现机制,计时器,事件系统,补间动画工具,音效播放,常用控件如循环列表视图,循环滚动视图等

    1.ListView,循环滚动列表,固定尺寸项,屏幕可见范围外item会回收等待下一次。支持横向,竖向,多行多列。支持追加删除数据。支持上右下左padding,支持设置项目锚点。 * 初始化,传入各种参数,设置item class ``...

    Android-ViewCapture-实现单独对某个Android视图进行截屏

    ViewCapture - 实现单独对某个Android视图进行截屏。支持ScrollView, HorizontalScrollView, ListView, RecyclerView, WebView。

    Android应用开发揭秘pdf高清版

    最重要的是还全面介绍了如何利用原生的C,C++(NDK)和Python、Lua等脚本语言(AndroidScriptingEnvironment)来开发Android应用,《Android应用开发揭秘》实战性强,书中的每个知识点都有配精心设计的示例,尤为...

    android开发入门与实战(下)

    7.3.11 滚动视图(ScrollView)介绍与应用 7.3.12 进度条(ProgressBar)介绍与应用 7.3.13 拖动条(SeekBar)介绍与应用 7.3.14 评分组件(RatingBar)介绍与应用 7.3.15 图片视图(ImageView)介绍与应用 7.3.16 图片按钮...

    android开发资料大全

    Android中利用ViewPager实现视图切换 Android泡泡聊天界面的源码实现 android 实现EditText震动效果 Touch Index Bar (有锤子有真相) Android数据库最基础的一个例子(本人已测试,可以运行) 为launcher添加一个...

    Android编程入门很简单.(清华出版.王勇).part1

    5.2.3 使用可滚动的视图——ScrollView 5.2.4文字的编辑 5.2.5 使用按钮——Button 5.2.6实例——计算器 5.2.7 使用图片按钮——ImageButton 5.2.8 使用复选框——CheckBox 5.2.9实例——请同意本协议 5.2.10 使用...

    android开发揭秘PDF

    第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 ...

    Android--UI-新手必备源码master.zip

    包括Android布局,弹窗,配色,单击事件,UI,精美炫酷的activity切换动画和空间动画,是新手必备的源码,内含相关的Dome 25件。 - - 文件夹 PATH 列表 卷序列号为 4E8D-6931 C:. │ .txt │ Android-UI-新手必备...

    Android开发资料合集-World版!

    4.6.11、列表视图(List View) 96 4.6.12、NoteList 99 4.7、TAB与TABHOST 106 4.8、RATINGBAR 110 4.8.1、例一 110 4.8.2、例二 112 4.9、DATE/TIME SET 115 4.9.1、DatePicker/TimePicker 115 4.9.2、...

    Android编程入门很简单.(清华出版.王勇).part2

    5.2.3 使用可滚动的视图——ScrollView 5.2.4文字的编辑 5.2.5 使用按钮——Button 5.2.6实例——计算器 5.2.7 使用图片按钮——ImageButton 5.2.8 使用复选框——CheckBox 5.2.9实例——请同意本协议 5.2.10 使用...

    Android实例代码

    13.4、使用WebView视图显示网页: 13.5、使用WebService进行网络编程: 第14章、管理Android手机桌面 14.1、管理手机桌面: 14.2、改变手机壁纸: 14.3、桌面快捷方式: 14.4、管理桌面小控件: 14.5、实时...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    13.4、使用WebView视图显示网页: 13.5、使用WebService进行网络编程: 第14章、管理Android手机桌面 14.1、管理手机桌面: 14.2、改变手机壁纸: 14.3、桌面快捷方式: 14.4、管理桌面小控件: 14.5、实时...

    《Android应用开发揭秘》源码

     第1章 Android开发简介  1.1 Android基本概念  1.1.1 Android简介  1.1.2 Android的系统构架  1.1.3 Android应用程序框架  1.2 OMS介绍  1.2.1 OPhone介绍  1.2.2 Widget介绍  1.3 小结  第2章 Android...

    《Android应用开发揭秘》附带光盘代码.

    《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言  第一部分 准备篇  第1章 Android开发简介  1.1 Android基本概念  1.1.1 Android简介  1.1.2 Android的系统构架  1.1.3 ...

    android开发demo集合

    6、 ListView 列表视图 7、WebView web视图 8、ToggleButton 动态布局效果 9、AnalogClock 、 DigitalClock and Chronometer 时钟和数字日期 10、AutoCompleteTextView 根据输入自动补充可能的全部 11、Spinner ...

Global site tag (gtag.js) - Google Analytics