官术网_书友最值得收藏!

3.2 And roid工程剖析

工程創建完成之后,需要剖析一下Android工程。

3.2.1 Android工程目錄結構

使用Android Studio工具開發Android應用程序,創建的工程目錄結構比較復雜,開發人員應該清楚各個目錄下面放置的是什么東西。工程根目錄下有app和Gradle Scripts, app是應重點關注的,app下面的主要目錄有manifests、java和res。

manifests目錄中的AndroidManifest.xml是當前Android應用程序的清單文件,記錄應用中所使用的各種組件,java是Java源代碼目錄,res是資源目錄。下面重點介紹一下res目錄。

res資源目錄中存放所有程序中用到的資源文件。“資源文件”指的是布局文件、圖片文件和配置文件等。子目錄主要有drawable、layout、mipmap和values。

? drawable。存放一些應用程序需要用的圖片文件(*.png和*.jpg等)。

? layout。屏幕布局目錄,layout目錄中放置的是布局文件,布局文件是Xml文件。

圖3-8 工程目錄結構

? mipmap。與drawable一樣存放資源圖片,在Android 2.2后增加目錄,Android系統會對mipmap做了一些優化,加快了圖片的渲染速度,提高的圖片質量,減少GPU的壓力。

? values。參數值目錄,存放軟件所需要顯示的各種文字和一些數據。可以在這個目錄下的strings.xml中存放各種文字,還可以存放不同類型的數據,例如colors.xml、dimens.xml和styles.xml等。

另外,為了適配不同的設備,res資源目錄中的drawable、layout、mipmap和values等資源目錄,可以分別有多個,圖3-9是在Windows資源管理器中看到的目錄結構,其中mipmap有5個不同的目錄:

圖3-9 Windows資源管理器目錄結構

? mipmap-mdpi。放置中質量圖片。

? mipmap-hdpi。放置高質量圖片,是mipmap-mdpi尺寸的1.5倍。

? mipmap-xhdpi。放置超高質量圖片,是mipmap-mdpi尺寸的2倍。

? mipmap-xxhdpi。放置超高質量圖片,是mipmap-mdpi尺寸的3倍。

? mipmap-xxxhdpi。放置超高質量圖片,是mipmap-mdpi尺寸的4倍。

3.2.2 R.java文件

訪問res目錄中的資源文件,并不能通過Java IO技術實現,而是通過R.java文件訪問。R.java文件是在工程編譯時候自動產生的R類。

R.java文件可參考如下代碼:

        package com.a51work6.helloandroid;

        public final class R{
            …
            public static final class mipmap{
                public static final int ic_launcher=0x7f030000;
            }
            public static final class layout{
                public static final int activity_main=0x7f030000;
            }
            public static final class string{
                public static final int app_name=0x7f040001;
                …
            }
        }

R類中包含很多靜態類,且靜態類的名字都與res中的一個目錄名字對應,就像是資源字典大全,包含了用戶界面、圖像、字符串等對應于各個資源的標識符,R類定義了該項目所有資源的索引。例如,在程序代碼中訪問activity_main.xml布局文件,可以通過表達式R. layout.activity_main訪問,示例代碼如下:

        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }

R類還可以訪問界面中的視圖,如果視圖在布局文件中定義id屬性,類似代碼“android:id="@+id/textview"”,那么在程序代碼中就可以通過R.id.textview表達式訪問該視圖。

3.2.3 MainActivity.java文件

Hello Android應用只有一個屏幕,所以只有一個活動類——MainActivity.java文件。MainActivity.java具體代碼如下:

        package com.a51work6.helloandroid;

        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
        public class MainActivity extends AppCompatActivity{

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

MainActivity是一個活動組件,MainActivity的父類是AppCompatActivity, AppCompatActivity是Activity子類,AppCompatActivity是支持ActionBar的活動類。onCreate方法是在活動組件初始化時候調用方法。setContentView方法是設置活動布局內容,參數是R.layout.activity_main。

3.2.4 activity_main.xml布局文件

布局文件activity_main.xml位于res的layout目錄中,activity_main.xml布局文件代碼如下:

       <?xml version="1.0" encoding="utf-8"?>
       <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="com.a51work6.helloandroid.MainActivity">

          <TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello World! "/>
       </RelativeLayout>

RelativeLayout說明當前界面布局是相對布局,TextView聲明一個標簽視圖,具體內容將在后面的章節詳細介紹。界面布局文件activity_main.xml可以使用文本工具打開,Android Studio提供界面設計工具如圖3-10所示,在界面設計工具中可以通過拖曳視圖到設計窗口實現界面設計。

圖3-10 Android Studio提供界面設計工具

提示 在界面設計窗口的左下角有兩個標簽——Design和Text,單擊Text標簽可以切換到Xml文本編輯窗口。

3.2.5 AndroidManifest.xml文件

Android的每個應用都必須包含一個AndroidManifest.xml清單文件,清單文件提供有關當前應用的基本信息,Android系統必須獲得這些信息才能運行該應用。清單文件描述的內容如下:

? 聲明應用的Java源代碼包名,包名非常重要,它是應用的唯一標識符。

? 描述應用中的組件,即Activity(活動)、Service(服務)、Broadcast Receiver(廣播接收器)和Content Provider(內容提供者)。

? 聲明應用必須具備的權限,例如應用中使用到的服務權限(如GPS服務、互聯網服務和短信服務等等)。

? 聲明應用所需的最低Android API級別。

? 聲明應用的安全控制和測試等信息。

注意 在Android Studio工程中,AndroidManifest.xml位于manifests根目錄下;而在操作系統(如Windows的資源管理器)中,AndroidManifest.xml位于應用的根目錄下,圖3-9所示的app/src/main目錄是應用的根目錄。

AndroidManifest.xml文件代碼如下:

                   <?xml version="1.0" encoding="utf-8"?>
                   <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                      package="com.a51work6.helloandroid">                                                   ①

                      <application
                          android:allowBackup="true"
                          android:icon="@mipmap/ic_launcher"                                                 ②
                          android:label="@string/app_name"                                                   ③
                          android:supportsRtl="true"                                                         ④
                          android:theme="@style/AppTheme">                                                   ⑤
                          <activity android:name=".MainActivity">                                            ⑥
                              <intent-filter>
                                  <action android:name="android.intent.action.MAIN"/>                        ⑦

                                  <category android:name="android.intent.category.LAUNCHER"/>                ⑧
                              </intent-filter>
                          </activity>
                      </application>

                   </manifest>

代碼第①行package="com.a51work6.helloandroid"是聲明應用的Java源代碼包名。清單文件中的組件聲明是在標簽application和 /application之間添加的。代碼第②行android:icon="@mipmap/ic_launcher"是設置應用圖標,@mipmap/ic_launcher是引用res/mipmap目錄中的ic_launcher.png圖片文件。代碼第③行android:label="@string/app_name"是聲明應用名,@string/app_name是引用res/values/strings.xml文件中的string name="app_name" /string標簽中的內容。strings.xml代碼如下:

       <resources>
            <string name="app_name" Hello Android /string>
       </resources>

AndroidManifest.xml文件代碼第④行android:supportsRtl="true"是聲明應用支持從右往左書寫語言習慣(主要是阿拉伯語和希伯來語)。代碼第⑤行是聲明應用主題為AppTheme。

代碼第⑥行聲明活動組件,在活動中可以聲明Intent Filter(意圖過濾器),組件通過意圖過濾器實現響應Intent(意圖), Android系統啟動某個組件之前,需要了解該組件要處理哪些意圖。清單文件中的組件聲明是在標簽intent-filter和 /intent-filter之間添加的,代碼第⑦行和第⑧行是聲明當前活動是主屏幕啟動的活動,即應用啟動的第一個界面。

主站蜘蛛池模板: 舒兰市| 昔阳县| 许昌县| 财经| 九江市| 南开区| 若羌县| 固镇县| 三门县| 东港市| 成武县| 正阳县| 蒙阴县| 宁明县| 徐闻县| 南澳县| 江陵县| 烟台市| 凌海市| 千阳县| 辰溪县| 南溪县| 新建县| 乌审旗| 张掖市| 高碑店市| 北辰区| 新龙县| 荣成市| 榕江县| 东安县| 子洲县| 景泰县| 洪雅县| 宜章县| 淮滨县| 方山县| 桂平市| 桑日县| 梁河县| 论坛|