zoukankan      html  css  js  c++  java
  • Android开发指南中文版(八)User Interface

    用户界面

    在一个Android应用程序中,用户界面使用View和ViewGroup对象建立。view和view group有很多种,均为View类的子类。

    View对象是用户界面的基本单元。View类是widget的父类,widget为系统内置ui对象,如文本框和按钮等等。ViewGroup类为layout类的父类,layout为不同种类的布局结构,例如线型、表格型和相对型。

    一个View对象是一个储存屏幕上的一块矩形的布局参数和内容的数据结构。一个View对象处理它自己的测量、布局、绘画、焦点变化、卷屏以及它所处的矩形区域内的键盘/手势交互。作为UI中的一个对象,View也是一个和用户交互信息的地方。

    View Hierarchy

    在Android平台上,使用一个View和ViewGroup组成的层次结构来定义一个Activity的UI,如下图所示。这个层次树可以简单也可以复杂,你可以使用Android预定义的widget和layout,也可以用你自己自定义的View来构建它。

    为将View层次树显示在屏幕上,你的Activity需要使用setContentView()方法,并将根节点对象的引用传递给他。Android系统接收到这个引用并用它来清除、测量和绘制这个树。根节点要求它的子节点能够绘制自己——每个view group节点负责它自己的子view来绘制自己。子View可能会从父View处获得大小和位置,但父对象最后决定子对象的大小。Android解析layout,初始化View并把它们加入它们的父View。由于它们按顺序绘制,如果这些元素相互重叠,最后一个被绘制的元素将位于最上层。How Android Draws Views介绍了绘制的细节。

    Layout

    最常见的定义layout和表示view结构的方法就是使用一个xml layout文件。xml提供了一个人类可读的结构。xml的每个元素是一个View或者ViewGroup对象。View对象为树中的树叶,ViewGroup对象为树中的树枝。

    xml元素的名称和它的java类相对应。因此一个<TextView>元素创建一个TextView对象,一个<LinearLayout>元素创建一个LinearLayout的view group。当你加载一个layout资源时,Android系统会基于layout中的元素来初始化这些运行时对象。

    例如,一个简单的竖排布局,中间有一个text view和一个按钮,像这样:

    <?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>

    注意LinearLayout元素包含TextView和Button。你可以在这个LinearLayout中使用另一个LinearLayout,来创建更复杂的布局。

    提示:你也可以在Java代码中绘制View和ViewGroup,使用addView(View)方法来动态插入View和ViewGroup对象。

    有很多方法来布局你的view。使用不同的View group,你可以让View和viewgroup组织为任意的形式。一些预定义的Viewgroup有:LinearLayout, RelativeLayout, TableLayout, GridLayout等。

    Widgets

    widget是一个View对象,它作为一个和用户交互的接口。Android提供了一系列已经定义好的widget,例如按钮,复选框以及文本框等。还有一些更复杂的widget,例如日期选择器,时钟以及缩放控制器等。你也可以定义自己的widget。

    Input  Events

    一旦你在UI中加入View/widgets,你可能希望知道用户对他们的操作,这样你就可以进行一些动作。为了得到input事件,有下列两种方法:

    • 定义一个event listener并在View中注册它。通常这是你监听事件的方法。View类包含一系列嵌套的on<xxx>Listener接口,每个都有一个on<xxx>()回调函数。例如View.OnClickListener(处理View上的点击事件),View.OnTouchListener(处理触摸屏事件),View.OnKeyListener(处理键盘事件)。因此如果你希望你的View处理点击事件,则定义OnClickListener的onClick()方法并使用setOnClickListener()来注册它。
    • 重定义View的一个已有的回调函数。当你实现自己的View类并希望监听某些事件时采用这种方法。

    Menus

    应用程序菜单是UI的另一个重要部分。菜单提供了一个显示程序功能和设置的可靠接口。最常见的菜单是使用设备上的MENU键呼出的。你也可以使用长按屏幕上某个元素的方式来呼叫出上下文菜单(Context Menu)。

    菜单也是用View层次来组织的,但是不要自己定义这个结构。使用onCreateOptionsMenu()和onCreateContextMenu()回调函数并定义菜单的内容。Android会自动建立需要的View结构并绘制其内容。

    菜单也需要处理他们的事件,因此不需要注册事件监听器(event listeners)。当菜单项被选择时,onOptionsItemSelected() 或 onContextItemSelected()方法会被调用。

    你也可以在xml中定义菜单的项。

    Advanced Topics

    Adapters

    有时候你希望给view group加入动态元素,这些元素不能硬编码,而是需要和外部数据相绑定。为了实现这一点,你需要用AdapterView作为view group,每一个子view使用adapter来进行初始化。

    AdapterView 是ViewGroup的一个实现,该view group使用一个给定的Adapter对象来确定它的子View。Adapter作为数据源(例如一个字符串数组)和AdapterView(负责显示)中的一个联系人。有好几种特殊的Adapter实现,例如CursorAdapter(用于从一个Cursor读取数据库数据)和ArrayAdapter(用来从任意数组中读取数据)。

    Styles and Themes

    可以用样式和主题来自定义标准widget的外观。

    • 一个样式是一个或多个格式属性的集合,这些格式属性可以被作为独立的元素放在layout中。例如你可以定义一个样式,该样式制定了某种字体大小和颜色,并将它制定给某几个View元素。
    • 一个主题是一个或多个格式属性的集合。这些属性可以对一个应用程序中所有的或一个activity使用。例如,你可以定义一个主题,制定了窗口框的颜色和面板背景颜色,以及菜单的字体字号等。一个主题可以被应用于某些activity或者整个应用程序。

    主题和样式是资源。Android提供了一些默认的样式和主题资源给你使用,你也可以定义自己的主题和样式。

  • 相关阅读:
    常用工具
    H5页面验收流程及性能验收标准
    埋点数据测试
    提高效率的必备工具
    移动APP安全测试
    Response响应相关
    AES加密解密
    Requests模块
    爬虫入门
    【CMDB】API传输验证
  • 原文地址:https://www.cnblogs.com/blueofsky/p/2312697.html
Copyright © 2011-2022 走看看