搜档网
当前位置:搜档网 › Android用户界面设计

Android用户界面设计

Android用户界面设计
Android用户界面设计

Android用户界面设计

Android用户界面设计:使用片段

Android 3.0引入的新的片断(Fragment)API,让我们更容易地创建动态用户界面。在这个教程中,我们学习如何将一个两屏的ListView转换成WebView流,以适应大屏幕的单屏流设计,比如在平板设备中。

这篇文章的节奏将比我们的入门教程更快一些。如果你对基本的Android控件或概念不熟悉你可能需要复习这个网站上我们其它的一些教程,甚至是Android API参考。最终的开源代码可以在Google code上下载到。

片段简介

在我们开始之间,让我们在更高的层次上定义一下什么是片段。通常来说,片段是一大块用户界面,它具有自己的生存周期。如果它听起来像一个Activity,那是因为它确实很像一个Activity。然而,片段与Activity不同,片段必须存在于Activity之内。片段不须要在它每次初始化的时候与同一个Activity配对,这使它具有一些灵活性。与Activity一样,片段也无需包含任何用户界面。

步骤0:开始

这个教程假设你读过我们的列表视图教程,你可以下载那个教程的代码,并完成一些任务,然后开始,也可以直接下载这个教程的代码直接开始。

步骤1:重新设计界面

下图示意了我上在列表视图教程中所提到的文章阅读应用,我们还没有考虑并使用片段:

这个流程在相对小屏幕上运行得很不错。然而,在大屏幕上,比如Motorola Xoom平板的10寸屏幕上,在列表视图上却浪费了很多空间。WebView看起来正常,但是有点枯燥。

这就是要引入片段的地方:在大屏幕上,我们可以提供更有效的用户界面,如果我们可以在同一屏上显示ListView和WebView。当用户点击左边“面板”的列表视图中的某一项时,右边的WebView更新显示相应的内容。

这种工作流程经常用于email或文档或RSS阅读器。下图就是重新设计之后的界面示意图:

步骤2:转换为基于片段的设计

现在我们知道了新的流程应该如何设计,我们也知道当前的两个活动必须转换成片段。我们将分几步来完成这个转换。第一步保持界面样子不变,只是使用片段修改每个界面内容。一个片段将包含当前的ListView,另一个包含WebView。然后我们再转到单个屏幕的实现,修改ListView和WebView之间的消息传递。

首先,将你的程序的项目构建目标改变Android 3.0。在Eclipse中,右键点击项目并选择“属性”。点击Android部分并选中Android 3.0。我们不使用任何Google API,所以Android开源项目版本足够了。然后点击“确定”按钮。

现在你就可以访问新的API了,包括片段API。

注意:在将来的教程中,我们将讨论如何使用新的兼容层来使得像片段API这样的技术在更早版本的Android设备上也能工作。但是现在它只能运行在Android 3.0设备上。

步骤3:创建片段类

创建两个Java类来代表两个片段:ListView界面和WebView界面。将它们命名为TutListFragment和TutViewerFragment。TutListFragment将继承ListFragment类,TutViewerFragment只是继承Fragment类。

在TutListFragment类中,我们需要重写两个方法: onListItemClick()和onCreate()。这些方法的内容看起来应该

很熟悉,它与之前我们讲过的TutListActivity类的代码一致。这个代码很快就要修改,但是现在暂时不需要,下面是当前TutListFragment类的代码:

@Override

public void onListItemClick(ListView l, View v, int position, long id) {

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

String content = links[position];

Intent showContent = new Intent(getActivity().getApplicationContext(),

TutViewerActivity.class);

showContent.setData(Uri.parse(content));

startActivity(showContent);

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setListAdapter(ArrayAdapter.createFromResource(getActivity()

.getApplicationContext(), R.array.tut_titles,

https://www.sodocs.net/doc/f29885698.html,yout.list_item));

}

TutViewerFragment类更简单一些。我们基于当前片段运行在同一个活动下并且直接从Fragment类内问部获取目标数据的事实。添加一个重写onCreateView()方法。这个方法的代码应该看起来像这样:

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

Intent launchingIntent = getActivity().getIntent();

String content = launchingIntent.getData().toString();

WebView viewer = (WebView) inflater.inflate(https://www.sodocs.net/doc/f29885698.html,yout.tut_view, container, false);

viewer.loadUrl(content);

return viewer;

}

直接访问活动实例的能力非常有用,但是在后面会引起一个问题。如果这个片段存在于带有列表片段的界面上会怎么样呢?在那样的情况下,就会没有启动目标来获取URL。类似的在TutListFragment中,只要当用户点击一个列表项时我们都直接启动一个新的Activity。如果TutViewFragment在同一个活动中存在什么怎么样呢?如果这样的话,启动一个新的活动就没有意义了。我们将在这个教程的后面回过头来解决这个问题。

步骤4:添加片段布局资源

现在创建一个新的名为“tutlist_fragment.xml”的布局文件来表示包含文章列表的片段。片段布局资源使用你创建的Fragment类的标签和引用。

xmlns:android="https://www.sodocs.net/doc/f29885698.html,/apk/res/android"

android:name="com.mamlambo.tutorial.tutlist.TutListFragment"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/tutlist_fragment">

接下来,创建一个类似的布局文件,叫做tutview_fragment.xml:

xmlns:android="https://www.sodocs.net/doc/f29885698.html,/apk/res/android"

android:name="com.mamlambo.tutorial.tutlist.TutViewerFragment"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/tutview_fragment">

步骤5:更新Activity类

TutListActivity和TutViewerActivity类必须修改。TutListActivity类只有一个方法,onCreate(),现在需要修改它来加载你在前一步创建的合适的片段布局资源,如下:

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.sodocs.net/doc/f29885698.html,yout.tutlist_fragment);

}

TutListActivity应该继承Activity类,而不是ListActivity类。

TutViewerActivity类也需要类似的修改,它的onCreate()方法现在看起来像这样:

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.sodocs.net/doc/f29885698.html,yout.tutview_fragment);

}

步骤6:检查你的进度

尝试现在运行程序。你会发现它和以前一样。没什么值得兴奋的,不是么?然而,整个用户界面现在使用片段来运行了。这使你需要做的下一步修改更加平滑,我们添加一个新的布局来组合两个片段以在一个界面上显示。然而可能你也注意到了,片段之间的通信的处理和我们文章之间的通信一样。事实上,我们每个片段对应的活动保持不变。当一个活动包含并管理两个片段时,这将不符合需求。首先让我们来修复它。

步骤7:改变TutListFragment通信

像你在步骤3中学到的一样,从TutListFragment对象直接启动一个活动不再有效了。WebView UI可能与列表是同一个活动的一部分——总之那就是我们对于大屏幕的计划。在那种情况下,我们只想在第二个片段中更新WebView的URL。

做这些修改,我们需要做几件事情。首先,我们让片段不依赖于它们所在的活动。要做到这一点,在TutListFragment类中添加一个侦听器,如下:

public interface OnTutSelectedListener {

public void onTutSelected(Uri tutUri);

}

然后通过更新onListItemClickListener()方法来触发它,如下:

@Override

public void onListItemClick(ListView l, View v, int position, long id) {

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

String content = links[position];

tutSelectedListener.onTutSelected(Uri.parse(content));

}

接下来让TutListActivity类实现OnTutSelectedListener接口,如下:

public class TutListActivity extends Activity implements

TutListFragment.OnTutSelectedListener {

...

@Override

public void onTutSelected(Uri tutUri) {

Intent showContent = new Intent(getApplicationContext(),

TutViewerActivity.class);

showContent.setData(tutUri);

startActivity(showContent);

}

}

现在我们分离了片段的功能,这些功能用于处理用户界面,作为控制器的活动,向下一个活动传递数据。我们后面要修改onTutSelected()方法来决定是否启动一个新的活动实例或者更新现有的片段实例。

步骤8:改变TutViewerFragment通信

现在让我们把注意力转到TutViewerFragment类上,它的代码也需要修改。片段不再查询启动目标来找出加载哪个URL,而是等待被通知要加载哪个URL。在样,我们可以直接修改WebView而不需要每次加载都重新创建片段。

首先,修改TutViewerFragment类,让它包含一个叫做updateUrl()的方法:

public void updateUrl(String newUrl) {

if (viewer != null) {

viewer.loadUrl(newUrl);

}

}

其次,删除所有onCreateView()方法下的功能,除了inflate()的调用。在TutViewerActivity类中,添加这些功能检索Intent然后调用updateUrl()方法,如下:

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.sodocs.net/doc/f29885698.html,yout.tutview_fragment);

Intent launchingIntent = getIntent();

String content = launchingIntent.getData().toString();

TutViewerFragment viewer = (TutViewerFragment) getFragmentManager()

.findFragmentById(R.id.tutview_fragment);

viewer.updateUrl(content);

}

此时此刻,程序的行为还是没有变化。然而通过进一步的代码,片段现在可以共存在同一个活动中或者分开。步骤9:添加双片段布局

现在让我们来创建带有两个片段的布局,以供特定情况使用。在layout-land目录(你可能需要自己创建),粘贴一份tutlist_fragment.xml。它将对横屏和竖屏提供不同的布局。竖屏模式将保持不变。编辑这个文件如下:

xmlns:android="https://www.sodocs.net/doc/f29885698.html,/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:name="com.mamlambo.tutorial.tutlist.TutListFragment"

android:layout_width="0dp"

android:layout_height="match_parent"

android:id="@+id/tutlist_fragment"

android:layout_weight="45">

android:name="com.mamlambo.tutorial.tutlist.TutViewerFragment"

android:layout_width="0dp"

android:layout_height="match_parent"

android:id="@+id/tutview_fragment"

android:layout_weight="55">

这将界面分隔成水平地两个片段(左右结构)。

步骤10:添加动态选项

现在我们可以为程序添加一些简单的逻辑,可以在启动一个新的活动(双屏模式)和更新存在的片段(单屏模式)之间切换。

为了达到这个目的,更新TutListActivity类的onTutSelected()方法如下:

@Override

public void onTutSelected(String tutUrl) {

TutViewerFragment viewer = (TutViewerFragment) getFragmentManager()

.findFragmentById(R.id.tutview_fragment);

if (viewer == null || !viewer.isInLayout()) {

Intent showContent = new Intent(getApplicationContext(),

TutViewerActivity.class);

showContent.setData(Uri.parse(tutUrl));

startActivity(showContent);

} else {

viewer.updateUrl(tutUrl);

}

}

我们所做的就是获取片段并检查它是否是现存的布局的一部分。如果不是,查看器活动启动,否则更新已存在的片段。

步骤11:运行最新的使用片段的程序

到此,程序将有两种模式:竖屏保持不变,横屏显示列表位于WebView的左侧。现在可以做几个改进,但是只是做微调,优化。比如,如果你在竖屏WebView模式下并旋转屏幕,结果还是只有WebView界面。你必须点击返回以获得双面视图。程序修正不在这个教程讲述的范围,但是你可以发现,如果使用适当的布局并且加上一些活动逻辑,你可以对于不同的屏幕和设备做到非常强大和灵活。

总结

片段API帮助组织用户界面组件,以使它们可以实现跨活动重用。这样,程序可以在相对少的代码量下,动态地适应它的流程和用户界面。你也能看到基于片段构建的代码更容易重新组织。更值得高兴的是,通过Google提供的兼容库,现在任何程序都可以使用片段了,它甚至兼容到Android 1.6。现在就使用片段来为每一个屏幕大小和形状创建你的程序用户界面吧!

Android用户界面设计:布局基础

理解布局对于好的Android应用设计来说是非常重要的。在这个教程里,我们提供一个关于布局如何适应Android 应用程序架构的概述。我们还探讨了一些特定的可用布局控件,用它们来以各种各样的方式组织应用程序屏幕内容。

什么是布局?

Android开发者使用术语“布局”,指的是两种含意中的一种。两种定义在这篇教程中都会用到,而且很不幸的是在Android开发社区它们被混着使用。布局的两种定义如下:

一种资源,它定义了在屏幕上画什么。布局资源存储在应用程序的/res/layout资源目录下的XML文件中。布局资源简单的说就是一个用于用户界面屏幕,或屏幕的一部分,以及内容的模板。

一种视图类,它的主要是组织其它控件。这些布局类(LinearLayout,,RelativeLayout,TableLayout等)用于在屏幕上显示子控件,如文本控件或按钮或图片。

Android用户界面可以定义为XML中的布局资源或程序动态创建。

使用Eclipse设计布局资源

Eclipse的Android开发插件包含了一个很方便的用于设计和预览布局资源的布局资源设计器。这个工具包括两个标签视图:布局视图允许你预览在不同的屏幕下以及对于每一个方向控件会如何展现;XML视图告诉你资源的XML定义。布局资源设计器如下图:

这里有一些关于在Eclipse中使用布局资源编辑器的技巧:

使用概要(Outline)窗格来在你的布局资源中添加和删除控件。

选择特定的控件(在预览或概要窗口)并使用属性窗格来调整特定控件的属性。

使用XML标签来直接编辑XML定义。

很重要的是要记住一点,Eclipse布局资源编辑器不能完全精确的模拟出布局在最终用户那的展现。对此,你必须在适当配置的模拟器中测试,更重要的是在目标设备上测试。而且一些“复杂”控件,包括标签或视频查看器,也不能在Eclipse中预览。

定义XML布局资源

设计程序用户界面最方便且可维护的方式是创建XML布局资源。这个访法极大地简化了UI设计过程,将许多用户界面控件的静态产物和布局,以及控件属性定义移动XML中,代替了写代码。它适应了UI设计师(更关心布局)和开发者(了解Java和实现应用程序功能)潜在的区别。开发者依然可以在必要的时候动态的改变屏幕内容。复杂控件,像ListView或GridView,通常用程序动态地处理数据。

XML布局资源必须存放在项目目录的/res/layout下。对于每一屏(与某个活动紧密关联)都创建一个XML布局资源是一个通用的做法,但这并不是必须的。理论上来说,你可以创建一个XML布局资源并在不同的活动中使用它,为屏幕提供不同的数据。如果需要的话,你也可以分散你的布局资源并用另外一个文件包含它们。

下面是一个简单的XML布局资源,一个LinearLayout模板包含一个TextView和一个ImageView,定义在XML中:

x m l n s:a n d r o i d="h t t p://s c h e m a s.a n d r o i d.c o m/a p k/r e s/a n d r o i d"

a n d r o i d:o r i e n t a t i o n="v e r t i c a l"a n d r o i d:l a y o u t_w i d t h="f i l l_p a r e n t"

a n d r o i d:l a y o u t_h e i g h t="f i l l_p a r e n t"a n d r o i d:g r a v i t y="c e n t e r">

a n d r o i d:i d="@+i d/P h o t o L a

b e l"a n d r o i d:l a y o u t_h e i g h t="w r a p_

c o n t e n t"

a n d r o i d:t e x t="@s t r i n g/m y_t e x t_l a

b e l"a n d r o i d:g r a v i t y="

c e n t e r_h o r i z o n t a l"a n

d r o i d:t

e x t S i z e="20d p"/>

a n d r o i d:s r c="@d r a w a

b l e/m a t t e r h o r n"a n d r o i d:a d j u s t V i e w B o u n d s="t r u e"

a n d r o i d:s c a l e T y p e="f i t X Y"a n d r o i d:m a x H e i g h t="250d p"a n d r o i d:m a x W i d t h="250d p"a n d r o i d:i d="@+i d/P h o t o" />

这个布局资源表示屏幕包含两个控件:首先有一些文字,然后在它下面有一个图片。这些控件组织在一个垂直方向的LinearLayout中。下面两幅图片展示了这个布局在横屏和竖屏下可能的样式:

在屏幕上显示一个布局资源只需要有包括onCreate()的一行代码就可以搞定。如果布局资源存放

在/res/layout/main.xml文件,代码可能是:

setContentView(https://www.sodocs.net/doc/f29885698.html,yout.main);用程序动态定义布局

你也可以用程序创建用户界面组件。为了易组织和可维护性,仅在特殊时候这样做,而不是在一般情况下。不是

直接使用setContentView()方法来加载布局资源,你必须创建屏幕内容然后向setContentView()方法提供包含所有要显示的子控件内容的父布局对象。

例如,下面的代码展示了如何用程序实例化一个LinearLayout视图并向里面放置两个TextView。没有使用任何资源。

p u b l i c v o i d o n C r e a t e(B u n d l e s a v e d I n s t a n c e S t a t e){s u p e r.o n C r e a t e(s a v e d I n s t a n c e S t a t e);//

s e t C o n t e n t V i e w(R.l a y o u t.m a i n);T e x t V i e w l a b e l=n e w T e x t V i e w(t h i s);

l a b e l.s e t T e x t(R.s t r i n g.m y_t e x t_l a b e l);l a b e l.s e t T e x t S i z e(20);

l a b e l.s e t G r a v i t y(G r a v i t y.C E N T E R_H O R I Z O N T A L);I m a g e V i e w p i c=n e w I m a g e V i e w(t h i s);

p i c.s e t I m a g e R e s o u r c e(R.d r a w a b l e.m a t t e r h o r n);p i c.s e t L a y o u t P a r a m s(n e w

L a y o u t P a r a m s(L a y o u t P a r a m s.W R A P_C O N T E N T,L a y o u t P a r a m s.W R A P_C O N T E N T));p i c.s e t A d j u s t V i e w B o u n d s(t r u e); p i c.s e t S c a l e T y p e(S c a l e T y p e.F I T_X Y);p i c.s e t M a x H e i g h t(250);p i c.s e t M a x W i d t h(250);L i n e a r L a y o u t l l= n e w L i n e a r L a y o u t(t h i s);l l.s e t O r i e n t a t i o n(L i n e a r L a y o u t.V E R T I C A L);l l.s e t L a y o u t P a r a m s(n e w

L a y o u t P a r a m s(L a y o u t P a r a m s.F I L L_P A R E N T,L a y o u t P a r a m s.F I L L_P A R E N T));l l.s e t G r a v i t y(G r a v i t y.C E N T E R);

l l.a d d V i e w(l a b e l);l l.a d d V i e w(p i c);s e t C o n t e n t V i e w(l l);}

如你所见,这些代码的大小将随着更多的控制添加到屏幕而迅速增加,使得屏幕内容更加难以维护和重用。

探索不同的布局类型

用复合布局来组织控件

布局(LinearLayout,TableLayout,RelativeLayout等)像其它控件一样也是一个控件。这意味着布局控件可以被嵌套。比如,为了组织屏幕上的控件你可以在一个LinearLayout中使用一个RelativeLayout,反过来也行。下面的图展示了一个屏幕,它有一个LinearLayout(父级),一个TableLayout(顶部子节点)以及一个FrameLayout(底部子节点)。

但是小心!保证你的屏幕相对简单,复杂布局加载很慢并且可能引起性能问题。

提供可选布局资源

在你设计你的程序布局资源时考虑设备的差异性。通常情况下是可能设计出在各种不同设备上看着都不错的灵活布局的,不管是竖屏还是模屏模式。必要的时候,你可以引入可选布局资源来处理特殊情况。例如,你可以根据设备的方向或设备是不是有超大屏幕(如网络平板)来提供不同的布局供加载。

Android简单的登陆界面的设计开发

通信实训报告 -Android移动平台开发 学院:信息工程学院 班级: 学号: 姓名:

实训内容: 一.1.Andriod的简介 Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android 2.4 Gingerbread 和Android 3.0 Honeycomb。 Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。 Android早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营,它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张,在智能MP4方面也有较大发展。采用Android系统主要厂商包括台湾的HTC,(第一台谷歌的手机G1由HTC生产代工)美国摩托罗拉,SE等,中国大陆厂商如:魅族(M9),华为、中兴、联想、蓝魔等。 2.Android构架图 二.1软件下载 Android SDK,网址是https://www.sodocs.net/doc/f29885698.html,. JDK的下载地址https://www.sodocs.net/doc/f29885698.html,/javase/downloads/widget/jdk6.jsp。Eclipse的下载网址是https://www.sodocs.net/doc/f29885698.html,/downloads/ 2.Android开发环境搭建

Android人机界面(UI)设计规范(带目录)

Android 人机界面设计规范 1Android 设计的依据 1.1 框架结构及流程 是什么使得android 有着独特的用户体验? 后台处理支持多任务功能 正在进行和事件驱动的提示信息 通过Widgets 和live folders 来实现实时信息的预览 用户想用时,任一应用程序都可以挑选和选择 android 不是关于程序的,它是关于活动,把任务分层, 1.2 架构基础 硬件平台 android 设备代表的是硬件和软件的完美组合。硬件辅助导航操作,并给android 提供更多更好的功能。当菜单没有开启,要把屏幕最大化时,菜单按钮可以在屏幕上提供更多的内容。返回按钮允许使用返回堆(back stack)。 竖屏与横屏 一般来说,用户界面开发竖屏与横屏。在新横屏也仍存在于新的Android 手机中。99%的android 布局支持横屏。 焦点和菜单 在触摸模式里没有焦点,只有轨迹球。Android 平台里没有鼠标焦点。确定你从未显示焦点。主菜单应该包括全部功能;它们与活动联系一起形成整体。菜单上的图标按重要性排序。如果有多于5 个图标,使用点击more menu 菜单来查看那些不太重要的菜单项。上下文菜单(长按)集中在一个特定对象。 总是把那些与所选项最相关的行为放在长按菜单的顶部。 需要记住的几点: 设计时要考虑速度和简洁 尽量分层来分等级 屏幕上的活动尽量最小 使用下载进度条,下载数据时,而不是让用户等待去看一个加载完全的页面。 考虑活动流而不是线性行为 1.3 屏幕上的行为

android 设计了特定的行为方式。在你的应用程序里利用好这一点。应该坚持android 行为的标准,避免混淆用户。 1.4 表达 细节使得产品集中在细节。程序的美学会帮助你集中注意在那些应用体验核心的关键任务上。API DEMO 是开始你的工具包的好地方。 2 用户界面原则 这部分试图讲述创造一个好的用户界面的一些基本的交互设计原则。这些原则是基本的,不止能应用于android 的用户界面设计,也可以应用于其他。苹果建议开发者花费60%的开发时间来进行设计工作。下面的用户界面原则将为好的设计提供一个基础。 2.1 隐喻 隐喻是构建一个基于操作任务心智模型的模块;用它们来传递应用程序的概念和功能。基于真实世界的应用对象可以帮助用户很快的理解该应用程序。当你设计你的应用程序时,要注意andriod 中存在的隐喻,不要重新定义它们。同时,检查你的应用程序执行的任务,看是否有些自然隐喻你可以使用。 2.2 反映用户的心智模型 用户已经有了一个来描述你的程序正在进行的任务的心智模型。这个心智模型产生于真实世界经验、其它软件和一般电脑基本知识的结合。比如说,用户在真实世界里有写字、寄信的经验,也会产生特定的期待,像写一封新的信,选一个接受者,然后寄出信。一个忽略用户心智模型的电子邮件程序用起来会很困难和不舒服。这是因为程序强加给用户一个不熟悉的概念模型,而不是建立一个用户已有的知识经验模式。 在设计程序用户界面之前,试着去发现你的用户的心智模型,这样帮助用户去执行任务。心智模型中内在的隐喻,它代表了任务的概念组成。在写信这个例子中,隐喻包括信件、邮包和信封。在涉及到照片的任务的思考模式中,隐喻包括照片、照相机和专辑。我们要努力地发现用户的期望,包括任务组成、组织、窗口布局的工作流、菜单和工具栏组织、控制面板的使用。 要通过努力地何必把个下面的特征与用户心智模型相融合: 熟悉性 用户的心智模型主要是建立在经验的基础上 简单化 一项任务的心智模型通常是流线型,关注任务的基本组成部分。尽管对于一个给定的任务有很多可选的细节,但是基本的组成部分占大部分,并且不会占用用户的注意。 可利用性Availability

第4章 Android用户界面设计

视图组件的使用模式 常用组件 高级组件 提示框与警告对话框

就是Android应用程序的开发过程。一般过程是先通过XML布局文件或Java代码创建界面布局,设定组件显示样式,随后获取UI组件对象,并处理组件事件响应。 视图组件的定义 资源的访问 生成视图组件资源标识 视图组件的引用 视图组件的事件响应 组件的常用属性

1.1视图组件的定义 使用XML布局文件定义视图组件 使用Java代码定义视图组件(不推荐)

1.1视图组件的定义 使用XML布局文件定义视图组件 Android平台为大多数视图组件以及其子类提供了XML标记,可通过XML布局文件中的标记来定义视图组件。XML中的每个元素代表了一个组件,即元素名称对应相应的Java类。

1.1视图组件的定义