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

1.4 App的工程結構

上一節我們在模擬器上成功地運行了第一個App(HelloWolrd),接下來好好研究一下它的工程結構。每個App的工程結構都差不多,只要掌握了基本結構,后面開發起來就會得心應手。

1.4.1 工程目錄說明

AndroidStudio的工程創建分兩個層級:第一個層級通過菜單File→New→NewProject創建,這里的新項目是指新的工作空間,對應Eclipse的workspace;第二個層級通過菜單File→New→NewModule創建,這里的新模塊是指一個單獨的App工程,對應Eclipse的project。第一次運行AndroidStudio都是選擇NewProject,表示先創建一個工作空間;后面還想創建新的App工程時,只需選擇NewModule,表示在當前工作空間下新建一個App工程。

例如,圖1-27是之前HelloWorld工程的目錄結構圖。

圖1-27 HelloWorld工程的目錄結構圖

從結構圖中可以看到,該工程下面有兩個目錄:一個是app,另一個是Gradle Scripts。其中,app下面又有3個子目錄,功能說明如下:

(1)manifests子目錄,下面只有一個xml文件,即AndroidManifest.xml,是App的運行配置文件。

(2)java子目錄,下面有3個com.example.hellorworld包,其中第一個包存放的是App工程的java源代碼,后面兩個包存放的是測試用的java代碼。

(3)res子目錄,存放的是App工程的資源文件。res子目錄下又有4個子目錄:

● drawable目錄存放的是圖形描述文件與用戶圖片。

● layout目錄存放的是App頁面的布局文件。

● mipmap目錄存放的是啟動圖標。

●values目錄存放的是一些常量定義文件,比如字符串常量strings.xml、像素常量dimens.xml、顏色常量colors.xml、樣式風格定義styles.xml等。

Gradle Scripts下面主要是工程的編譯配置文件,主要有:

(1)build.gradle,該文件分為項目級與模塊級兩種,用于描述App工程的編譯規則。

(2)proguard-rules.pro,該文件用于描述java文件的代碼混淆規則。

(3)gradle.properties,該文件用于配置編譯工程的命令行參數,一般無須改動。

(4)settings.gradle,配置哪些模塊在一起編譯。初始內容為include ':app',表示只編譯App模塊。

(5)local.properties,項目的本地配置,一般無須改動。該文件是在工程編譯時自動生成的,用于描述開發者本機的環境配置,比如SDK的本地路徑、NDK的本地路徑等。

1.4.2 編譯配置文件build.gradle

項目級別的build.gradle一般無須改動,我們只需關注模塊級別的build.gradle。下面在初始的build.gradle文件中補充文字注釋,方便讀者更好地理解每個參數的用途。

        apply plugin:'com.android.application'


        android {
            // 指定編譯用的SDK版本號,如25表示使用Android 7.1編譯
            compileSdkVersion 25
            // 指定編譯工具的版本號。這里的頭兩位數字必須與compileSdkVersion保持一致,具體的版本號
    可在sdk安裝目錄的sdk\build-tools下找到
            buildToolsVersion "25.0.2"


            defaultConfig {
              // 指定該模塊的應用編號,即App的包名。該參數為自動生成,無須修改
              applicationId "com.example.helloworld"
              // 指定App適合運行的最小SDK版本號,如15表示至少要在Android 4.0.3上運行
              minSdkVersion 15
              // 指定目標設備的SDK版本號,即該App最希望在哪個版本的Android上運行
              targetSdkVersion 25
              // 指定App的應用版本號
              versionCode 1
              // 指定App的應用版本名稱
              versionName "1.0"
            }
            buildTypes {
              release {
                  // 指定是否開啟代碼混淆功能。true表示開啟混淆,false表示無須混淆。
                  minifyEnabled false
                  // 指定代碼混淆規則文件的文件名
                  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
              }
            }
        }


        // 指定App編譯的依賴信息
        dependencies {
            // 指定引用jar包的路徑
            compile fileTree(dir:'libs', include:['*.jar'])
            // 指定單元測試編譯用的junit版本號
            testCompile 'junit:junit:4.12'
            // 指定編譯Android的高版本支持庫,如AppCompatActivity必須指定編譯appcompat-v7庫
            compile 'com.android.support:appcompat-v7:25.1.0'
        }

1.4.3 App運行配置AndroidManifest.xml

AndroidManifest.xml用于指定App內部的運行配置,是一個XML描述文件,根節點為manifest,根節點的package指定了該App的包名。manifest下面又有若干子節點,分別說明如下:

(1)uses-sdk,該節點有兩個屬性:android:minSdkVersion和android:targetSdkVersion。這兩個屬性是早期Eclipse開發App時使用的,現在這兩個字段改成放到build.gradle文件中,故而Android Studio不配置uses-sdk也沒有關系。

(2)uses-permission,該節點用于聲明App運行過程中需要的權限名稱。例如,訪問網絡需要上網權限,拍照需要攝像頭權限,定位需要定位權限等。

(3)application,該節點用于指定App的自身屬性,默認的屬性說明如下:

● android:allowBackup,用于指定是否允許備份,開發階段設置為true,上線時設置為false。

● android:icon,用于指定該App在手機屏幕上顯示的圖標。

● android:label,用于指定該App在手機屏幕上顯示的名稱。

● android:supportsRtl,設置為true表示支持阿拉伯語/波斯語這種從右往左的文字排列順序。

● android:theme,用于指定該App的顯示風格。

application節點下還有幾個子節點,比如活動activity、服務service、廣播接收器receiver、內容提供器provider等,這些子節點的詳細屬性會在后續章節詳細說明。

1.4.4 在代碼中操縱控件

在一開始創建Hello World工程時,Android Studio默認打開了兩個文件,分別是布局文件activity.xml和代碼文件MainActivity.java。下面先看布局文件activity.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.example.helloworld.MainActivity">


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

這里可以看到xml文件中只有兩個節點,分別是RelativeLayout和TextView。再仔細看看,有沒有發現我們熟悉的Hello World?沒錯,模擬器App界面顯示的Hello World就來自于這里,也就是TextView控件的android:text屬性值。可以把這里的Hello World改為其他文字,比如“你好、世界”或I Love Android,改完保存文件后再依次選擇菜單Run→Run 'app',看看App界面上的文字是不是變成新的了?

當然,我們的目標并不僅限于在布局文件中修改文字,還要能夠在代碼中修改文字的內容。再次打開代碼文件MainActivity.java,看看里面有什么內容。該java文件中MainActivity類的內容如下:

        public class MainActivity extends AppCompatActivity {


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

這里可以看出,MainActivity.java的代碼內容很簡單,只有一個MainActivity類,該類下面只有一個函數onCreate。注意onCreate內部的setContentView方法直接引用了布局文件的名字activity_main,該方法的意思是往App界面填充activity.xml的布局內容。現在我們要在這里改動改動,加點“綠葉紅花”讓它好看一些。首先打開activity.xml,在TextView節點下方補充一行android:id="@+id/tv_hello";然后回到MainActivity.java,在setContentView方法下面補充如下幾行代碼:

              //獲取名字為tv_hello的TextView控件
              TextView tv_hello = (TextView) findViewById(R.id.tv_hello);
              //給TextView控件設置文字內容
              tv_hello.setText("今天天氣真熱啊,火辣辣的");
              //給TextView控件設置文字顏色
              tv_hello.setTextColor(Color.RED);
              //給TextView控件設置文字大小
              tv_hello.setTextSize(30);

保存文件后依次選擇菜單Run→Run 'app',模擬器上的App界面就變成了如圖1-28所示的樣子。

圖1-28 修改文字后的HelloWorld界面

現在不但文字內容改變了,文字顏色和字體大小也發生了變化。怎么樣,是不是很有成就感呢?好的開始是成功的一半,現在我們初步學會了在代碼中操作控件,下一章進一步學習在App界面上人機交互。

主站蜘蛛池模板: 七台河市| 崇义县| 玛纳斯县| 阿城市| 体育| 苍梧县| 建德市| 富宁县| 濉溪县| 米泉市| 金华市| 波密县| 金溪县| 怀远县| 苗栗县| 定襄县| 凌云县| 灵寿县| 政和县| 平远县| 天台县| 英吉沙县| 阿城市| 昌都县| 池州市| 景德镇市| 遂川县| 张家界市| 岳池县| 屏山县| 大渡口区| 长寿区| 宿州市| 邢台市| 长武县| 辉南县| 绥滨县| 阿勒泰市| 滕州市| 繁峙县| 连山|