zoukankan      html  css  js  c++  java
  • (原创)《Android编程权威指南》学习笔记01-- Android应用初体验--004

      我们先学习如何使用xml代码来定义布局。

      在当前的activity_quic.xml文件中,定义了默认的activity布局。应用的默认布局经常改变,但是xml布局文件却总是与代码清单1-1文件相似。

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".QuizActivity" >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    
    </RelativeLayout>

            代码清单1-1 代码清单1-1:默认的activity布局(activity_quiz.xml)

      首先,我们注意到activity_quiz.xml文件不再包含版本声明与文件编码的如下代码:

    <?xml version = "1.0" encoding = "utf-8" ?>

      ADT21开发版本以后,android布局文件已不再需要该行代码。不过,很多情况下,可能还会看到它。

      应用activity的布局默认定义了两个组件(widget):RelativeLayout 和 Textview.

      组件 是组成用户界面的构造模块。按钮、文本输入控件和选择框等都是组件。

      Android SDK内置了多种组件,通过配置各种组件可获得所需的用户界面及行为。每个组件是View类或其子类(如TextView或Button)的一个具体实例。

      QuizActivity的用户界面需要下列五个组件:

      1.  一个垂直LinerLayout组件;

      2. 一个TextView组件

      3. 一个水平LinerLayout组件;

      4. 两个Button组件。

      

         布置并显示在屏幕上的组件。

      下面我们在activity_quiz.xml文件中定义这些组件。

    <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
        android:layout_width  = "match_parent"
        android:layout_height = "match_parent"
        android:gravity       = "center"
        android:orientation   = "vertical" >    
        
        <TextView
            android:layout_width  = "wrap_content"
            android:layout_height = "wrap_content"
            android:padding       = "24dp"
            android:text          = "@string/question_text" />
        
        <LinearLayout
            android:layout_width  = "wrap_content"
            android:layout_height = "wrap_content"
            android:orientation   = "horizontal" >
        
            <Button
                android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="@string/true_button" />
            
            <Button
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="@string/false_button" />
            
        </LinearLayout>
        
    </LinearLayout>

                代码清单1-2:在XML文件(activity_quiz.xml)中定义组件

      需要特别注意的是:开发工具无法校验布局XML内容,请避免输入或拼写错误。

      根据所使用的工具版本不同,用三行以android:text开头的代码可能会产生错误信息。暂时忽略它们,稍后处理。

      可以看出,元素名称就是组件的类型。

      各元素均有一组xml属性。属性可以看作是如何配置组件的指令。

      

    视图层次结构

      组件包含在视图对象的层级结构,即视图层级结构(view hieratchy)中。图1-10展示了代码清单1-2所示的xml布局对应的视图层级结构。

      

      从上可以看出,根元素是一个LinearLayout组件。作为根元素,LinearLayout组件必须指定Android xml资源文件的命名空间属性为:http://schemas.android.com/apk/res/android。

      LinearLayout组件继承自View子类的ViewGroup组件。ViewGroup组件是一个包含并配置其他组件的特殊组件。如需以一列或一排的样式布置组件,使用LinearLayout组件就可以了。其他ViewGroup子类还包括FrameLayout、TableLayout和RelativeLayout。

      若某个组件包含在一个ViewGroup中,该组件与ViewGroup即构成父子关系。根LinearLayout有两个子组件:TextView和LinearLayout。作为子组件的LinearLayout本身还有两个Button子组件。

    组件属性
      下面我们一起来看看配置组件的一些常用属性。
      1. android:layout_width和android:layout_height属性
      几乎每类组件都需要android:layout_width和android:layout_height属性。它们通常被设置为以下两种属性值之一。
        match_parent:视图与其父视图大小相同。
        wrap_content:视图将根据其内容自动调整大小。
         (以前还有一个fill_parent属性值,等同于match_parent,目前已废弃不用。 

      TextView组件比其包含的文字内容区域稍大一些,这主要是android:padding="24dp"属性的作用。该属性告诉组件在决定大小时,除内容本身外,还需要增加额外指定量的空间。这样屏幕上显示的问题与按钮之间便会留有一定的空间。(dp即density-independent pixel,指与密度无关像素,第八章将介绍有关它的概念。)

      2. android:orientation属性

      android:orientation属性是两个LinearLayout组件都具有的属性,决定了组件是水平放置还是竖直放置的。在上面xml中,根LinearLayout是垂直的,子LinearLayout是水平的。

      LinearLayout子组件的定义顺序决定着其在屏幕上显示的顺序。在竖直的LinearLayout中,第一个定义的子组件出现在屏幕的最上端。而在水平的LinearLayout中,第一个定义的子组件出现在屏幕的最左端。(如果设备语言是从右至左显示,则第一个定义的子组件则出现在屏幕的最右端。)

      3. android:text属性

        TextView与Button组件具有android:text属性。该属性指定组件显示的文字内容。

      请注意,android:text属性值不是字符串字面值,而是对字符串资源(string resources)的引用。 

      字符串资源包含在一个独立的名为strings的XML文件中,虽然可以硬编码设置组件的文本属性, 如android:text="True", 但这通常不是个好方法。将文字内容放置在独立的字符串资源XML文件中,然后引用它们才是好方法。

      需要在activity_quiz.xml文件中引用的字符串资源目前还不存在。现在我们来添加这些资源。

    创建字符串资源

      每个项目都包含一个名为strings.xml的默认字符串文件。

      在包浏览器中,找到res/values目录,点击小三角显示目录内容,然后打开strings.xml文件。忽略图形界面,在编辑区底部选择strings.xml标签页,切换到代码界面。

    <?xml version = "1.0" encoding = "utf-8" ?>
    <resources>
        <string name = "app_name" > GeoQuiz </string>
        <string name = "question_text" > Constantinople is the largest city in Turkey. </string>
        <string name = "true_button" > True </string>
        <string name = "false_button" > False </string>
        <string name = "action_settings" > Settings </string>  <!-- 每个人版本不一样,星月这里跟书上不同。书上是:name = "menu_settings" -->
    </resources>

                代码清单1-3:添加字符串资源(strings.xml)

      现在,在GeoQuiz项目的任何XML文件中,只要引用到@string/false_button,应用运行时,就会得到文本“False”.

      保存strings.xml文件。这时,activity_quiz.xml布局曾经提示缺少字符串资源的信息应该不会再出现了。(如仍有错误信息,那么检查一下这两个文件,确认是否存在输入或拼写错误。)

      字符串文件默认被命名为strings.xml,当然也可以按个人喜好任意取名。一个项目也可以有多个字符串文件。只要这些文件都放置在res/values/目录下,并且含有一个resources根元素,以及多个string子元素,字符串定义即可被应用找到并得到正确使用。

  • 相关阅读:
    MKMapVIew学习系列2 在地图上绘制出你运行的轨迹
    WPF SDK研究 Intro(6) WordGame1
    WPF SDK研究 Intro(3) QuickStart3
    WPF SDK研究 Layout(1) Grid
    WPF SDK研究 目录 前言
    WPF SDK研究 Intro(7) WordGame2
    WPF SDK研究 Layout(2) GridComplex
    对vs2005创建的WPF模板分析
    WPF SDK研究 Intro(4) QuickStart4
    《Programming WPF》翻译 第6章 资源
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/4579907.html
Copyright © 2011-2022 走看看