(原创)《Android编程权威指南》学习笔记01-- Android应用初体验--005

从布局 XML到视图对象

  在创建GeoQuiz项目的同时,也创建了一个名为QuizActivity的Activity子类。QuizActivity类文件存放在项目的src目录下。目录src是项目全部Java源代码的存放处。

  打开QuizActivity.java文件,查看其中的代码,如下:

  

package com.bignerdranch.android.geoquiz;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class QuizActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_quiz);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.quiz, menu);
        return true;
    }
    
}

            代码清单1-4:QuizActivity的默认类文件(QuizActivity.java)

  该Java类文件包含两个Activity方法:onCreate(Bundle)和onCreateOptionsMenu(Menu)。 
  暂不用理会onCreateOptionsMenu(Menu)方法,第16章会详细介绍它。
  activity子类的实例创建后,onCreate(Bundle)方法将会被调用。activity创建后,它需要获取并管理属于自己的用户界面。获取activity的用户界面,可调用以下Activity方法:  

public void setContentView( int layoutResID )

  通过传入布局的资源ID参数,该方法生成指定布局的视图并将其放置在屏幕上。布局视图生成后,布局文件包含的组件也随之以各自的属性定义完成实例化。

资源与资源ID

  布局是一种资源资源是应用非代码形势的内容,比如图像文件、音频文件以及XML文件等。

  项目的所有资源文件都存放在目录res的子目录下。通过包浏览器可以看到,布局activity_quiz.xml资源文件存放在res/layout/目录下。包含字符串资源的strings文件存放在res/values/目录下。

  在包浏览器展开目录gen,找到并打开R.java文件,即可看到GeoQuiz应用当前所有的资源ID。R.java文件在Android项目编译过程中自动生成,遵照该文件头部的警示,请不要尝试修改该文件的内容。

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package com.bignerdranch.android.geoquiz;

public final class R {
    public static final class attr {
    }
    public static final class dimen {
        /**  Default screen margins, per the Android Design guidelines. 

         Customize dimensions originally defined in res/values/dimens.xml (such as
         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
    
         */
        public static final int activity_horizontal_margin=0x7f040000;
        public static final int activity_vertical_margin=0x7f040001;
    }
    public static final class drawable {
        public static final int ic_launcher=0x7f020000;
    }
    public static final class id {
        public static final int action_settings=0x7f080000;
    }
    public static final class layout {
        public static final int activity_quiz=0x7f030000;
    }
    public static final class menu {
        public static final int quiz=0x7f070000;
    }
    public static final class string {
        public static final int action_settings=0x7f050004;
        public static final int app_name=0x7f050000;
        public static final int false_button=0x7f050003;
        public static final int question_text=0x7f050001;
        public static final int true_button=0x7f050002;
    }
    ...
}

            代码清单1-5:GeoQuiz应用当前的资源ID(R.java)

  目前为止,我们还未在代码中引用过字符串,但如果需要,则应该使用以下方法:

setTitle( R.string.app_name );

  要为组件生成资源ID,请在定义组件时为其添加上android:id属性。在activity_quiz.xml文件中,分别为两个按钮添加上android:id属性,如代码清单1-6所示。

<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:id            = "@+id/true_button"
            android:layout_width  = "wrap_content"
              android:layout_height = "wrap_content"
              android:text          = "@string/true_button" />
        
        <Button
            android:id            = "@+id/false_button" 
              android:layout_width  = "wrap_content"
              android:layout_height = "wrap_content"
              android:text          = "@string/false_button" />
        
    </LinearLayout>
    
</LinearLayout>

            代码清单1-6:为按钮添加资源ID(activity_quiz.xml)

  请注意android:id属性值前面有一个+标志,而android:text属性值则没有这是因为我们将要创建资源ID,而对字符串资源只是做了引用。

  保存activity_quiz.xml文件,重新查看R.java文件,确认R.id内部类中生成了两个新的资源ID,如代码清单1-7所示。

public final class R {
...
public static final class id {
        public static final int action_settings=0x7f080002;
        public static final int false_button=0x7f080001;
        public static final int true_button=0x7f080000;
    }
...

            代码清单1-7:新的资源ID(R.java)

原文地址:https://www.cnblogs.com/wodehao0808/p/4582379.html