Android UI设计
无意中看到的几篇文章,想翻译出来分享给大家。不过声明,翻译后的意思不一定能完全表达作者的意图,如果想看原文,请参考:
到目前为止,我之前的几篇关于Android的文章都集中于向你展示如何解决An droid中的问题,而没有花太多的时间来讨论Android应用程序开发的视觉元素——UI设计。在这篇和接下来的文章,我将带你穿越构建Android应用程序的UI元素。文章的开始部分,我将讨论Android中的一些布局(Layouts)和一些在屏幕上摆放的构件(Widget)。
Android屏幕UI组件
到这个时点,你已经看到Android应用程序最基本的单元式Activity。Activity 用于显示应用程序的UI,它可能包含许多构件,如buttons, labels, text boxes 等。一般,你会使用一个XML文件(例如,位于res/layout文件夹下的main. xml文件)来定义你的UI,它看起来像这样:
<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="/a pk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
安全教育板报</LinearLayout>
在运行时,你在Activity 的onCreate 事件处理函数里加载XML UI ,使用Ac tivity 类的tContentView 方法:
1 2 3 4 5 @Override public void onCreate (Bundle savedInstanceState ) { super .onCreate (savedInstanceState ); tContentView (R.layout .main ); } 在编译期间,XML 文件中的元素会编译成相应地Android GUI 类,并设定了指定的特性。当加载时,An droid 系统会创建Activity 的UI 。
使用XML 文件来构建UI 往往是比较容易的,然后,也存在一些时候需要你在运行时动态地构建UI (例如,当编写游戏)。因此,也有可能完全通过代码来创建的你的UI 。 Views 和ViewGroups
一个Activity 包含View 和ViewGroup 。一个View 是一个构件,它在屏幕上有一个外观。构件包括bu ttons, labels, text boxes 等。一个View 继承自android.view.View 基类。
一个或多个View 可以组合起来放入一个ViewGroup 。一个ViewGroup (它是特殊类型的View )提供一个布局,在其上你可以安排View 的显示和次序。ViewGroup 包括LinearLayout, FrameLayout 等。一个ViewGroup 继承自android.view.ViewGroup 基类。朱贵儿
Android 支持以下的ViewGroup :
•
LinearLayout •
AbsoluteLayout •
TableLayout •
RelativeLayout •
FrameLayout • ScrollView
接下来的章节将讨论每个ViewGroup的细节。注意,在练习中,通常会嵌套不同类型的布局来创建想要的UI。
创建一个简单工程
新能源科学与工程专业就业前景
创建一个新的Android工程,如图1所示命名它。
图 1 使用Eclip来创建一个新的Android工程
Eclip支持很少的Android UI设计,因此,你不能在设计面板上进行构件的拖拽。作为替代的,你可以使用免费的DroidDraw工具(从www.droid draw/获取)。图2显示了动作中的DroidDraw。你可以在不同的布局上拖拽构件,然后使用它来生成等价的XML代码。然后DroidDraw不是很完美,
对于你刚开始Android的UI设计来说还是非常有用的,并且它是学习Android 中众多的View和ViewGroup的得力工具。
我们英语图 2 DroidDraw 网页应用程序来设计你的AndroidUI 你还可以下载独立的DroidDraw 版本(Windows, Mac OS X, Linux )。 LinearLayout
LinearLayout 以单一的行或列来布局View 。子View 既可以垂直摆放也可以水平摆放。查看LinearLayout 如何工作,让我们修改一下工程的l 文件: 2 <?xml version ="1.0" encoding ="utf-8"?>
<LinearLayout xmlns:android ="/apk/res/android"
android:orientation ="vertical"少林拳
android:layout_width ="fill_parent" android:layout_height ="fill_parent"
市场禁入
>
<TextView
12月英语缩写android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:text ="@string/hello"
/>
</LinearLayout> 在l 文件中,可以看到根元素是,并且它包含一个元素。元素控制着其内元素的顺序和显示。 每个View 和ViewGroup 都有一堆通用的特性,其中一部分显示在表1中。
特性
描述 layout_width
指定View 或ViewGroup 的宽度 layout_height
指定View 或ViewGroup 的高度 layout_marginTop
指定View 或ViewGroup 上方的空间 layout_marginBottom 指定View 或ViewGroup 下方的空间 layout_marginLeft
指定View 或ViewGroup 左边的空间 layout_marginRight 指定View 或ViewGroup 右边的空间
layout_gravity
指定子View 如何摆放 layout_weight
指定Layout 的剩余空间的多少分配给View layout_x
指定View 或ViewGroup 的x 坐标 layout_y 指定View 或ViewGroup 的y 坐标 表 1 View 和ViewGroup 的通用特性 注意,这些特性中的部分只在当一个View 位于某个特定的ViewGroup 里才能应用。例如,layout_weight 和layout_gravity 特性只能当View 位于LinearLa yout 或者TableLayout 里才能应用。
举个例子,上面的<TextView>元素使用fill_parent 常量填充了父元素的全部宽度(在这里是屏幕)。它的高度使用wrap_content 常量,表示它的高度依据内容的高度(在这里,是其内的文本)。如果确实不想让<TextView>View 占据整个行,那么,你也可以设定layout_width 特性为wrap_content ,像这样: 1
2
3
凉拌白菜丝
4
5
<TextView android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:text ="@string/hello" /> 这样设置意味著View 的宽度与其内包含的文本的宽度一样,你还可以设置宽度为一个绝对的值,像这样: