Android 应用程序接口指南---第二节:UI---第一章 用户界面和布局

浏览:
字体:
发布时间:2013-12-20 16:18:50
来源:
第1章 用户界面和布局
应用程序的用户界面就是用户能看到并可以与它交互的任何东西。Android提供多种预置的UI组件,如结构化布局对象和允许你为应用程序创建图形用户界面的UI控件。Android也会为特殊的接口提供其他UI模块,如对话框,通知和菜单。在一个Android应用中,所有用户界面元素都是由View和ViewGroup对象创建的。View 是一种可以在屏幕上绘制某种画面并且可以与用户互动的对象。ViewGroup对象则是为了定义布局的接口而保存其他View(和ViewGroup)对象。Android提供一个View和ViewGroup子类的集合,这个集合能为你提供相同的输入控制(例如按钮和文本框)和各种各样的布局模式(例如一个线性或者相对布局)
 
1.1 用户界面布局
 
对应用程序的每个组件来说,用户界面都是由View对象和ViewGroup对象的层次结构来定义的,如图1-1所示。每一个view group都是用来组织子view的一个不可见容器,然而子 views可能是输入控制UI或者绘制UI某些部分的其他widgets。这个树形结构可以根据你的需要简单化或复杂化。(但是对于性能来说简单最好)
 
 
图1-1  定义UI布局的view层次结构图
 
为了声明你的布局,你可以在代码中实例化View对象然后启动构建树,但定义布局最容易、最有效的方法是利用XML文件。XML文件可以为布局提供一个可读结构,这与HTML文件相似。一个View的XML节点名称与它代表的Android类相对应。所以UI里的一个<TextView>节点会创建一个TextView widget,一个<LinearLayout>节点会创建一个LinearLayout view group。例如,包含一个文本视图和一个按钮的简单纵向布局,正如代码清单1-1所示:
 
 
<?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:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="I am a Button" />
</LinearLayout>
 
 
 
代码清单1-1
 
当你在应用程序中载入一个布局资源时,Android会初始化每个进入到正运行对象的布局节点,这时你可以用它来定义附加行为,查询对象状态,或修改布局。
 
1.2 用户界面组件
 
你不需要用View和ViewGroup对象来构建你所有的UI。Android系统提供了几个标准UI布局的应用程序组件,因此你只需要定义内容。这些应用程序组件都有一组唯一的API,如Action Bar,Dialogs,和Status Notifications,这些都会在他们各自的文档中被一一介绍。
 
1.3 布局(Layout)
 
布局为用户界面定义了一个可视化结构。可以用两种方式声明一个布局:
 
◆在XML中声明UI元素
 
Android提供了简单的XML元素,它的元素名字与View类以及子类对应,就像布局和widgets一样。
 
◆在运行时动态实例化布局元素
 
使用代码创建布局元素(并且操作他们的属性)
 
 
 
Android提供了非常灵活的方法来声明和管理应用UI。例如,可以先在XML中声明默认布局,屏幕元素会根据它们的属性显示。接下来可以在应用中添加代码来修改屏幕对象的状态,也可以在运行时修改在XML中声明的对象。 在XML中声明UI的好处是,可以更好地区分显示和控制这些行为的代码。UI描述与应用代码无关,也就是说可以修改和调整XML中的UI布局但是不用修改源java代码。例如,能够为不同的屏幕目标、不用的设备屏幕大小、不同的语言创建不同的XML布局文件。另外,在XML中声明布局使得UI更容易可视化,这样更容易调试界面。本章主要用于教会你如何在xml中声明布局。如果你对运行时动态创建布局感兴趣,那么请参考viewgroup以及view类说明。 一般来说,xml声明UI元素的词汇和类的命名以及方法名密切相关,元素根据类名、属性名根据方法名来命名。实际上,能猜到什么XML属性对应一个类的方法, 或者能够猜到哪个类对应给定的XML元素,这往往是直接的对应。但是,注意并不是所有的词汇都是等同的。在某些情况下,有的命名有些许不同。例如,EditText元素有个text属性对应EditText.setText()方法。
 
1.4 写XML
 
使用android的XML词汇,可以快速的设计UI布局和它们包含的屏幕元素。跟创建web页面使用html类似(一系列的嵌套)。 每一个布局文件必须包含一个根节点。这个根节点必须是一个View 或者ViewGroup对象。一旦你定义了根节点,可以添加任意的布局对象或者widgets作为子元素,逐步构建一个View层次布局。例如,这是一个XML布局文件使用了纵向的线性布局(LinearLayout)来排列一个TextView和Button,如代码清单1-2所示:
 
 
<?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:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>
 
 
 
代码清单1-2
 
这个文件应该是在当前android工程/res/layout/目录下.xml的扩展名来保存这个文件,这样才会正确编译。我们接下来会讨论这里显示的每个属性。
 
1.5 加载XML资源
 
当编译应用程序的时候,每一个XML布局文件都被编译到view资源中。应该在Activity.onCreate()回调方法中实现加载布局资源。通过调用setContentView()来设置布局资源(按照R.layout.layout_file_name的格式)。例如,如果你的XML布局文件被保存为main_layout.xml,那么可以在activity中这样加载,如代码清单1-3所示:
 
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);
}
 
 
代码清单1-3
 
1.6 属性
 
每一个View和ViewGroup对象支持他们各自的XML属性。有些属性是特定的View对象(例如,TextView支持textSize属性)但是只要继承这个类,这些属性也可以在其他地方使用。有些属性是对所有的的View对象都适用的,因为它们是从最原始抽象的View类继承下来的(像id属性)。其它的属性被认为是布局参数,比较容易的理解是这样的,ViewGroup代表布局,View代表布局中的元素(比如Button之类),但是ViewGroup是继承自View的,所以你可以理解为,一切皆View。
 
1.6.1 ID
 
每一个View对象都可能有一个int型的ID和它相关,这是在树中View对象的唯一标识。当程序编译完,这个ID就是一个引用,但是ID属性在XML布局文件里面是通过string类型赋值的。下面让我们看一下XML中如何定义一个View对象的ID:
 
android:id="@+id/my_button"
这个@符号在字符串开头表明xml解析器会解析和扩展剩余的ID字符串,并把它定义为ID资源。“+”表示这是一个新的资源名字,要创建并且增加的我们的资源中(在R.java文件里)。Android framework层也提供了一部分ID资源。如果直接使用android 资源ID的话,你不需要”+”,但是要加上android包名命名空间,如下所示:
 
android:id="@android:id/empty"
Android的包命名空间中,我们现在引用android.R资源类的ID,而不是本地的资源类中引用。 为了创建views,并在应用中使用,常用的流程如下:
 
1.在布局文件中创建view/widget,并为他们分配一个唯一的ID
 
<Button android:id="@+id/my_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/my_button_text"/>
 
 
2.接下来在代码中创建view对象实例,从布局中找到它(一般在OnCreate()方法中)
 
Button myButton = (Button) findViewById(R.id.my_button);
 
 
如果是在相对布局(RelativeLayout)中的话定义好ID是非常重要的。因为它们的布局定义就是需要依赖ID。一个ID在整个树中不一定要求唯一,但是你搜索的部分树应该是唯一的(经常是整个树,所以最好的办法是在整个树中是唯一的)尽量让你的ID全局唯一。
 
>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();