zoukankan      html  css  js  c++  java
  • (原创)《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)

  • 相关阅读:
    Android&Handler2
    ACM&数字阶梯求和(大数问题)
    Android&MyThread
    【转】 《基于MFC的OpenGL编程》Part 15 Selection
    【转】 《基于MFC的OpenGL编程》Part 12 Creating and Using Display Lists
    【转】《基于MFC的OpenGL编程》Part 16 Reflection
    【转】 《基于MFC的OpenGL编程》Part 8 Colors
    【转】 《基于MFC的OpenGL编程》Part 14 Quadrics
    开发不同语言版本的C#程序
    基于ADS40的线阵摄影测量及数据处理
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/4582379.html
Copyright © 2011-2022 走看看