之前我們創(chuàng)建了一個(gè) Hello World 項(xiàng)目瞧掺,根據(jù)前幾節(jié)的了解祈争,gradle 和系統(tǒng)已經(jīng)自動(dòng)幫我們生成了項(xiàng)目的文件历恐,現(xiàn)在讓我們來(lái)看看一些主要文件的代碼和作用企锌。
app | src | AndroidManifest.xml
這個(gè)是我們 Android 項(xiàng)目的配置文件衅檀,我們?cè)趹?yīng)用程序中定義的所有四大組件都需要在這個(gè)文件里注冊(cè),另外還可以在這個(gè)文件中給應(yīng)用程序添加權(quán)限聲明霎俩。( 注意:與 eclipse 不同的是哀军,項(xiàng)目中的versionCode
、versionName
以及對(duì)程序最低兼容和目標(biāo)版本的控制不再是在這里打却,而是在項(xiàng)目的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>
- 每個(gè) XML 文檔都由 XML 序言開始杉适,在前面的代碼中的第一行便是 XML序言,
<?xml version="1.0" encoding="utf-8"?>
這一行代碼會(huì)告訴解析器和瀏覽器柳击,這個(gè)文件應(yīng)該按照 1.0 版本的 XML 規(guī)則進(jìn)行解析猿推,且文件采用 utf-8 的編碼格式。 -
manifest xmlns:android="http://schemas.android.com/apk/res/android"
定義了我們需要使用的架構(gòu)來(lái)源 -
package="com.example.newam.helloworld"
定義了我們程序所在的 java 包捌肴,應(yīng)用包名是應(yīng)用的唯一標(biāo)識(shí)蹬叭。 -
<application/>
標(biāo)簽里面的屬性如同字面意思,是對(duì)R.java
文件里各種資源的引用状知。 -
<intent-filter/>
里面的兩行代碼把 HelloWorldActivity 注冊(cè)為該項(xiàng)目的主要活動(dòng)活動(dòng)秽五。 -
.HelloWorldActivity
中.
的意思是com.example.newam.helloworld
的縮寫。因?yàn)樵?code><manifest/>標(biāo)簽里面已經(jīng)通過(guò)package
屬性指定了程序的包名饥悴。使用android:label
指定活動(dòng)的標(biāo)題欄的內(nèi)容坦喘,標(biāo)題欄顯示在活動(dòng)的最頂部,給主活動(dòng)指定的 label 還會(huì)成為 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"
這兩行可以理解為語(yǔ)法判斷器瓣铣,按
alt+/
作為提示,提示該輸入什么不該輸入什么贷揽,以及代碼對(duì)錯(cuò)棠笑,不用聯(lián)網(wǎng)。 android:layout_width="match_parent"
android:layout_height="match_parent"
這兩行代碼是控制組件的寬度和高度禽绪,有三個(gè)屬性可以選擇:wrap_content
表示當(dāng)前元素的高度僅需剛好包含路面的內(nèi)容就行蓖救、fill_parent
和match_parent
作用一樣,用于填充父容器水平方向的空間丐一,即拉伸藻糖。tools:context="com.example.newam.helloworld.HelloWorldActivity"
不會(huì)被打包進(jìn) APK,它說(shuō)明當(dāng)前的 layout 渲染的上下文是hello_world_layout.xml
里面activity android:name
所指定的那個(gè)activity库车,如果這個(gè) activity 在hello_world_layout.xml
里面設(shè)置了某個(gè) theme 巨柒,那么 ADT 的Layout Editor 會(huì)在 Design 可視化視圖中即時(shí)渲染對(duì)應(yīng) theme 的背景控件,描述了一種所見即所得的效果柠衍。<TextView/>
是安卓系統(tǒng)提供的一個(gè)控件洋满,用于在布局中顯示文字,android:text
為這個(gè)控件設(shè)置文本珍坊,因?yàn)?字符串的定義都是使用鍵值對(duì)的形式牺勾,引用了string.xml
資源里面的hello_world
鍵,它對(duì)應(yīng)了一個(gè)Hello World!
的值阵漏,所以最終能顯示出來(lái)我們看到的文字 驻民。
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方法是一個(gè)活動(dòng)被創(chuàng)建時(shí)必定被執(zhí)行的方法
super.onCreate(savedInstanceState);
//這個(gè)方法給當(dāng)前的活動(dòng)引入了一個(gè)叫做hello_world_layout布局
setContentView(R.layout.hello_world_layout);
//Log是安卓的工具類(android.util.Log)提供了如下幾個(gè)方法供我們打印日志,如下在logcat中只打印debug信息
Log.d("HelloWorldActivity","onCreate execute");
}
}
- 每個(gè) activity 的注冊(cè)聲明必須得放在
AndroidManifest.xml
的<application/>
這個(gè)標(biāo)簽里面回还,不然會(huì)報(bào)錯(cuò)裆泳。我們通過(guò)<activity/>
這個(gè)標(biāo)簽進(jìn)行注冊(cè),并使用android:name
這個(gè)屬性來(lái)指定要注冊(cè) activity 的名稱柠硕。 - 如果要隱藏標(biāo)題欄工禾,對(duì)于
Activity
,得把requestWindowFeature(Window.FEATURE_NO_TITLE);
添加到onCreate();
方法里面蝗柔;而對(duì)于AppCompatActivity
闻葵,使用getSupportActionBar().hide();
即可。 - 調(diào)用一個(gè)
setContentViews();
方法來(lái)給當(dāng)前的活動(dòng)加載一個(gè)布局癣丧,而在該方法中我們一般會(huì)傳入一個(gè) layout 的 id槽畔,剛剛創(chuàng)建的布局的 id 現(xiàn)在已經(jīng)添加到 R 文件中了,這里的 R 文件是 app| build generated | source | r | debug| com下的R.java
文件坎缭,而 External Libraries| AndroidSDK | res竟痰,也是一個(gè) R 文件,不能混淆了掏呼。
推門看到覆滿天際細(xì)碎的云絮坏快。西邊樹叢后的晚霞像野火余燼被風(fēng)吹過(guò),驟然亮起憎夷;然后光色急遽變幻莽鸿,冷凝,沉落拾给,漫天云紋隨之潛入夜色祥得。這大地之上的璀然告別發(fā)生在短短的十分鐘里,突然一陣惶然失措蒋得,讓人什么都來(lái)不及想级及、來(lái)不及說(shuō)。