之前我們創(chuàng)建了一個 Hello World 項目,根據(jù)前幾節(jié)的了解,gradle 和系統(tǒng)已經(jīng)自動幫我們生成了項目的文件,現(xiàn)在讓我們來看看一些主要文件的代碼和作用。
app | src | AndroidManifest.xml
這個是我們 Android 項目的配置文件,我們在應(yīng)用程序中定義的所有四大組件都需要在這個文件里注冊,另外還可以在這個文件中給應(yīng)用程序添加權(quán)限聲明。( 注意:與 eclipse 不同的是,項目中的versionCode、versionName以及對程序最低兼容和目標(biāo)版本的控制不再是在這里,而是在項目的build.gradle里面)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.newam.helloworld">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".HelloWorldActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- 每個 XML 文檔都由 XML 序言開始,在前面的代碼中的第一行便是 XML序言,
<?xml version="1.0" encoding="utf-8"?>這一行代碼會告訴解析器和瀏覽器,這個文件應(yīng)該按照 1.0 版本的 XML 規(guī)則進(jìn)行解析,且文件采用 utf-8 的編碼格式。 -
manifest xmlns:android="http://schemas.android.com/apk/res/android"定義了我們需要使用的架構(gòu)來源 -
package="com.example.newam.helloworld"定義了我們程序所在的 java 包,應(yīng)用包名是應(yīng)用的唯一標(biāo)識。 -
<application/>標(biāo)簽里面的屬性如同字面意思,是對R.java文件里各種資源的引用。 -
<intent-filter/>里面的兩行代碼把 HelloWorldActivity 注冊為該項目的主要活動活動。 -
.HelloWorldActivity中.的意思是com.example.newam.helloworld的縮寫。因為在<manifest/>標(biāo)簽里面已經(jīng)通過package屬性指定了程序的包名。使用android:label指定活動的標(biāo)題欄的內(nèi)容,標(biāo)題欄顯示在活動的最頂部,給主活動指定的 label 還會成為 launcher 中應(yīng)用程序的名稱。
main | res | layout | hello_world_layout.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.newam.helloworld.HelloWorldActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<TextView
android:text="I love QYPing!"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="31dp"
android:id="@+id/textView2" />
</RelativeLayout>
-
xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"這兩行可以理解為語法判斷器,按
alt+/作為提示,提示該輸入什么不該輸入什么,以及代碼對錯,不用聯(lián)網(wǎng)。 android:layout_width="match_parent"
android:layout_height="match_parent"
這兩行代碼是控制組件的寬度和高度,有三個屬性可以選擇:wrap_content表示當(dāng)前元素的高度僅需剛好包含路面的內(nèi)容就行、fill_parent和match_parent作用一樣,用于填充父容器水平方向的空間,即拉伸。tools:context="com.example.newam.helloworld.HelloWorldActivity"不會被打包進(jìn) APK,它說明當(dāng)前的 layout 渲染的上下文是hello_world_layout.xml里面activity android:name所指定的那個activity,如果這個 activity 在hello_world_layout.xml里面設(shè)置了某個 theme ,那么 ADT 的Layout Editor 會在 Design 可視化視圖中即時渲染對應(yīng) theme 的背景控件,描述了一種所見即所得的效果。<TextView/>是安卓系統(tǒng)提供的一個控件,用于在布局中顯示文字,android:text為這個控件設(shè)置文本,因為 字符串的定義都是使用鍵值對的形式,引用了string.xml資源里面的hello_world鍵,它對應(yīng)了一個Hello World!的值,所以最終能顯示出來我們看到的文字 。
main | java | com | username | helloworld | HelloWorldActivity.java
package com.example.newam.helloworld;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class HelloWorldActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//代碼提示快捷鍵:Ctrl+Alt+空格鍵選中activity_main可以打開到指定的R.java文件中。
//onCreate方法是一個活動被創(chuàng)建時必定被執(zhí)行的方法
super.onCreate(savedInstanceState);
//這個方法給當(dāng)前的活動引入了一個叫做hello_world_layout布局
setContentView(R.layout.hello_world_layout);
//Log是安卓的工具類(android.util.Log)提供了如下幾個方法供我們打印日志,如下在logcat中只打印debug信息
Log.d("HelloWorldActivity","onCreate execute");
}
}
- 每個 activity 的注冊聲明必須得放在
AndroidManifest.xml的<application/>這個標(biāo)簽里面,不然會報錯。我們通過<activity/>這個標(biāo)簽進(jìn)行注冊,并使用android:name這個屬性來指定要注冊 activity 的名稱。 - 如果要隱藏標(biāo)題欄,對于
Activity,得把requestWindowFeature(Window.FEATURE_NO_TITLE);添加到onCreate();方法里面;而對于AppCompatActivity,使用getSupportActionBar().hide();即可。 - 調(diào)用一個
setContentViews();方法來給當(dāng)前的活動加載一個布局,而在該方法中我們一般會傳入一個 layout 的 id,剛剛創(chuàng)建的布局的 id 現(xiàn)在已經(jīng)添加到 R 文件中了,這里的 R 文件是 app| build generated | source | r | debug| com下的R.java文件,而 External Libraries| AndroidSDK | res,也是一個 R 文件,不能混淆了。
推門看到覆滿天際細(xì)碎的云絮。西邊樹叢后的晚霞像野火余燼被風(fēng)吹過,驟然亮起;然后光色急遽變幻,冷凝,沉落,漫天云紋隨之潛入夜色。這大地之上的璀然告別發(fā)生在短短的十分鐘里,突然一陣惶然失措,讓人什么都來不及想、來不及說。