Android用户界面设计:“.NET研究”创建列表视图程序

简介:   列表视图(ListView)是Android平台下用于显示不定数量的数据最有用的视图控件之一。在这个教程中,我们将向你展示如何使用ListView来浏览文章列表。  在之前的文章中,你看到了许多关于不同布局控件的教程。

  列表视图(ListView)是Android平台下用于显示不定数量的数据最有用的视图控件之一。在这个教程中,我们将向你展示如何使用ListView来浏览文章列表。

  在之前的文章中,你看到了许多关于不同布局控件的教程。在今天这个教程中,你将结合使用它们。应用程序本身非常简单:它将显示文章标题列表,当点击标题时,显示文章内容。这篇文章的节奏将比我们的入门教程更快一些。如果你对基本的Android控件或概念不熟悉你可能需要复习这个网站上我们其它的一些教程,甚至是Android API参考。最终的开源代码可以在Google code上下载到。

  步骤0: 创建项目

  在Eclipse中创建一个新的Android项目。我们将项目命名为MT-List,起始活动命名为TutListActivity。这个Activity必须继承ListActivity类,它是一个特殊的Activity类,用于帮助管理ListView控件。我们使用的是Android2.3.3的API。

  步骤1: 设计列表界面

  实际上,这一步要做的很少。一个由重复项组成的ListView控件,每一项都有相同的布局(一项一个模板)。我们想要显示一个文章标题列表。每个标题都是ListView中的一项。因此,每个列表项的模板只需要一个TextView控件。在你的项目中添加一个叫做list_item.xml布局资源文件,它描述了列表中的每一项的模板布局。在这个例子中,它看起来可能像这样:

  
  
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< TextView
xmlns:android
= " http://schemas.android.com/apk/res/android "
android:layout_width
= " fill_parent "
android:layout_height
= " wrap_content "
android:textSize
= " 24dp "
android:padding
= " 6dp " />

  字号加上填充属性值要确保在平均大小的屏幕下列表每一项对于平均手指的大小来说是足够大的触摸目标。

  步骤2: 为ListView填充数据

  ListView控件设计用于从数据源加载数据。可以使用适配器从数据库,数组或其它数据源读取数据。在这个程序中我们使用数组作为数据源。今后,你可以将数组替换为某些实时数据源。在你的项目中创建两个字符串数组(你可以将他们添加到strings.xml或者一个分离的arrays.xml文件,随你愿意)。将一个数组取名为“tut_titles”,另一个名为“tut_links”。用网站上的有效的标题和URL填充这两个数组。下面是我们的数组:

  
  
< string - array name = " tut_titles " >
< item > Design & amp; Build a 1980s iOS Phone App: Design Comp Slicing </ item >
< item > Best of Tuts + in February 2011 </ item >
< item > Create a Brick Breaker Game with the Corona SDK: Game Controls </ item >
< item > Exporting Graphics for Mobile Apps: PNG or JPEG ?</ item >
< item > Android Tablet Design </ item >
< item > Build a Titanium Mobile Pizza Ordering App: Order Form Setup </ item >
< item > Create a Brick Breaker Game with the Corona SDK: Application Setup </ item >
< item > Android Tablet Virtual Device Configurations </ item >
< item > Build a Titanium Mobile Pizza Ordering App: Topping Selection </ item >
< item > Design & amp; Build a 1980s iOS Phone App: Interface Builder Setup </ item >
</ string - array >
< string - array name = " tut_links " >
< item > http: // mobile.tutsplus.com/tutorials/mobile-design-tutorials/80s-phone-app-slicing/</item>
< 上海闵行企业网站设计与制作item > http: // mobile.tutsplus.com/articles/news/best-of-tuts-in-february-2011/</item>
< item > http: // mobile.tutsplus.com/tutorials/corona/create-a-brick-breaker-game-with-the-corona-sdk-game-controls/</item>
< item > http: // mobile.tutsplus.com/tutorials/mobile-design-tutorials/mobile-design_png-or-jpg/</item>
< item > htt上海网站建设p: // mobile.tutsplus.com/tutorials/android/android-tablet-design/</item>
< item > http: // mobile.tutsplus.com/tutorials/appcelerator/build-a-titanium-mobile-pizza-ordering-app-order-form-setup/</item>
< item > http: // mobile.tutsplus.com/tutorials/corona/corona-sdk_brick-breaker/</item>
< item > http: // mobile.tutsplus.com/tutorials/android/android-sdk_tablet_virtual-device-configuration/</item>
< item > http: // mobile.tutsplus.com/tutorials/appcelerator/pizza-ordering-app-part-2/</item>
< item > http: // mobile.tutsplus.com/tutorials/iphone/1980s-phone-app_interface-builder-setup/</item> 上海闵行企业网站制作style="color: #008000;">
</ string - array >

  当然这个数据是静态的。在一些情况下,使用静态数据对于一个ListView来说也是有意义的。对于这些情况,使用一个字符串数组资源非常简单和方便。需要确保标题和链接的排序是一致的,这样两个数组才能匹配。

  步骤3: 将数组适配到ListView

  现在程序已经有数据了,现在来显示它们。回到TutListActivity.java,修改onCreate()方法,使用setListAdapter()方法来加载数据。和常规的活动不一样,对于整个活动就仅仅只是一个ListView的情况,ListActivity不需要使用setContentView()。完成后,你的整个ListActivity将看起来像这样:

  
  
public class TutListActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setListAdapter(ArrayAdapter.createFromResource(getApplicationContext(),
R.array.tut_titles, R.layout.list_item));
}
}

  这时候,你已经可以运行这个程序了。你将看到一个具有所有本教程中所有标题的ListView。上划和下划都正常。但是,点击标题还没有任何反应。

  步骤4:处理ListView条目点击

  处理ListView中条目的点击与其它视图对象的处理方式相似:使用侦听器(listener)。在这里,我们关注OnTimeClickListener。你可能注意到我们还没有直接处理过ListView对象。现在是时候了。在ListActivity中,简单地调用getListView()方法来遍历ListView,然后调用setOnItemClickListener()方法并且一次性实现它们:

  
  
getListView().setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick(AdapterView <?> parent, View view,
int position, long id) {
// TBD
}
});

  onItemClick()方法会在用户每次点击列表视图中的每一项时被调用。为了方便,它可以传入几个有用的参数,其中一个我们需要它来启动查看器活动(viewer activity)。等等,什么是查看器活动?

  步骤5:创建查看器活动

  非常好的问题。让我们现在就来创建一个查看器活动!这个活动将用于向用户显示教程内容。通过继承Activity创建一个新的类,并把它命名为TutViewerActivity.java。为它创建一个布局资源文件,文件只包括一项:一个WebView控件。布局文件应该看起来如下:

  
  
<? xml version = " 1.0 " encoding = " utf-8 " ?>
上海企业网站设计与制作e="color: #000000;">< WebView
xmlns:android
= " http://schemas.android.com/apk/res/android "
android:layout_width
= " match_parent "
android:layout_height
= " match_parent "
android:id
= " @+id/tutView " >
</ WebView >

  在TutViewerActivity类的onCreate()方法中,调用setContentView()方法并将这个布局传入。最后,不要忘了将这个活动添加到你的AndroidManifest.xml 文件。

  步骤6:启动Details Activity

  注意力回到TutListActivity一会。让我们看看我们需要做什么来启动这个查看器Activity显示合适文章链接。在onItemClick()方法中,被点击项的位置被作为一个int型的值传入。这就是我们需要用来访问文章链接数组的值。
  链接数组里的字符串值是URL。传递URL到另一个活动的简便方法是通过setData()方法向Intent添加一个Uri。下面是onItemClick()的最终实现,它启动查看器活动,传入合适的URL:

  
  
@Override
public void onItemClick(AdapterView <?> parent, View view,
int position, long id) {
String content
= links[position];
Intent showContent
= new Intent(getApplicationContext(),
TutViewerActivity.
class );
showContent.setData(Uri.parse(content));
startActivity(showContent);
}

  如果你只是将这些代码直接粘贴到onCreate()方法的最后面,你会注意到links变量还没有定义。因为它将用于OnItemClickListener类,变量必须是一个final值,如下:

  
  
final String[] links = getResources().getStringArray(R.array.tut_links);

  这一行必须放在OnItemClickListener的定义之前。是的,你可以将它定义成非final的成员变量。对于更复杂的情况,那样做甚至是必须的。但是在这里,我们可以在方法中放置所有代码。
  现在如果你运行这个程序,你将得到一个空白的查看器界面。活动正确地启动了,但是我们需要去连接查看器活动来在WebView控件中加载URL。

  步骤7:加载URL

  注意力回到TutViewerActivity.java文件。在调用setContentView()方法之后,添加代码,在传入的Intent中检索Uri并将它转换成String变量。然后将一个调用添加到WebView类的loadUrl()方法。整个TutViewerActivity类的代码将看起来像这样:

  
  
public class TutViewerActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.tut_view);
Intent launchingIntent
= getIntent();
String content
= launchingIntent.getData().toString();
WebView viewer
= (WebView) findViewById(R.id.tutView);
viewer.loadUrl(content);
}
}

  现在再运行程序。正常了么?还没有!最后一个细节:你必须把网终权限添加到AndroidManifest.xml文件。现在运行这个程序,你将看到程序正常运行了:

  步骤8:改善体验(可选)

  目前来看,用户体验只是做到了仅仅是可以用。ListView展示所有文章标题,用户可以点击列表某一项并且可以转到一个带有WebView控件的活动来展示合适的URL的内容。为了将这个最基本的实现变得更优雅一些你可能考虑以下几个方面:

  • 设置浏览视图的初始缩放以应对接来的缩放
  • 配置WebView使其包含更多增强浏览体验的控件
  • 动态加载文章列表,而不是使用静态数组
  • 为ListView添加特效视觉效果
  • 充分利用大屏幕
  • 上海徐汇企业网站制作i>向ListView增加附加的信息:副标题,难度级别,图标,已读指示,收藏按钮等。

  总结

  ListView小工具是在界面上以列表形式组织数据的快速方式。在这个教程中我们只是接触到ListView控件的最表层。然而,你学到了最基础的:创建列表项,使用数据适配器,以及处理列表项点击。

目录
相关文章
|
6月前
|
Android开发
Android Launcher研究(二)-----------Launcher为何物,究竟是干什么
Android Launcher研究(二)-----------Launcher为何物,究竟是干什么
164 2
|
1月前
|
Android开发 开发者
安卓应用开发中的自定义视图
【9月更文挑战第37天】在安卓开发的海洋中,自定义视图犹如一座座小岛,等待着勇敢的探索者去发现其独特之处。本文将带领你踏上这段旅程,从浅滩走向深海,逐步揭开自定义视图的神秘面纱。
35 3
|
3月前
|
供应链 物联网 区块链
未来触手可及:探索新兴技术的趋势与应用安卓开发中的自定义视图:从基础到进阶
【8月更文挑战第30天】随着科技的飞速发展,新兴技术如区块链、物联网和虚拟现实正在重塑我们的世界。本文将深入探讨这些技术的发展趋势和应用场景,带你领略未来的可能性。
|
3月前
|
测试技术 Android开发 Python
探索软件测试的艺术:从基础到高级安卓应用开发中的自定义视图
【8月更文挑战第29天】在软件开发的世界中,测试是不可或缺的一环。它如同艺术一般,需要精细的技巧和深厚的知识。本文旨在通过浅显易懂的语言,引领读者从软件测试的基础出发,逐步深入到更复杂的测试策略和工具的使用,最终达到能够独立进行高效测试的水平。我们将一起探索如何通过不同的测试方法来确保软件的质量和性能,就像艺术家通过不同的色彩和笔触来完成一幅画作一样。
|
6天前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
2月前
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
58 10
|
2月前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
43 3
|
2月前
|
前端开发 Android开发 开发者
安卓应用开发中的自定义视图基础
【9月更文挑战第13天】在安卓开发的广阔天地中,自定义视图是一块神奇的画布,它允许开发者将想象力转化为用户界面的创新元素。本文将带你一探究竟,了解如何从零开始构建自定义视图,包括绘图基础、触摸事件处理,以及性能优化的实用技巧。无论你是想提升应用的视觉吸引力,还是追求更流畅的交互体验,这里都有你需要的金钥匙。
|
2月前
|
前端开发 搜索推荐 Android开发
探索安卓开发中的自定义视图##
【9月更文挑战第6天】 在安卓应用开发的世界里,自定义视图如同绘画艺术中的色彩,它们为界面设计增添了无限可能。通过掌握自定义视图的绘制技巧,开发者能够创造出既符合品牌形象又提升用户体验的独特界面元素。本文将深入浅出地介绍如何从零开始构建一个自定义视图,包括基础框架搭建、关键绘图方法实现、事件处理机制以及性能优化策略。准备好让你的安卓应用与众不同了吗?让我们开始吧! ##
|
3月前
|
前端开发 Android开发 开发者
安卓开发中的自定义视图:构建你的第一个控件
【8月更文挑战第26天】在安卓开发的浩瀚海洋中,自定义视图是一块充满魔力的乐土。它不仅是开发者展示创造力的舞台,更是实现独特用户体验的关键。本文将带你步入自定义视图的世界,从基础概念到实战应用,一步步教你如何打造自己的第一个控件。无论你是初学者还是有经验的开发者,这篇文章都将为你的开发之旅增添新的风景。
下一篇
无影云桌面