這是 Android 開發(fā)(入門)課程 的第一部分《布局和交互》的第一次課程實(shí)踐,導(dǎo)師是 Lyla Fujiwara靡挥,主要內(nèi)容是安裝 Android Studio 并制作第一個(gè) Android App序矩。
安裝 Android Studio
在前兩節(jié)課利用 XMLV 查看仿真效果之后,從現(xiàn)在開始跋破,終于可以用真正的 IDE: Android Studio 來學(xué)習(xí)和實(shí)踐 Android 了簸淀。
把 Android Studio 看作開發(fā) Android App 的工作室,JDK 則是工具箱毒返。因此租幕,在安裝 Android Studio 之前,需要先安裝 JDK (Java Development Kit)拧簸。
- Java 由 Oracle 支持與維護(hù)劲绪,到下載頁面選擇相應(yīng)包下載安裝 JDK蕴纳,完成后打開 Terminal 輸入
java -version
驗(yàn)證安裝是否成功洪燥,若成功,返回值如下:
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
- Android Studio 由 Google 提供虎眨,到 Android 開發(fā)者網(wǎng)站下載安裝弟劲,成功后軟件會(huì)正常啟動(dòng)祷安。
具體的安裝步驟不再贅述,Udacity 提供了一份 Android Studio 安裝故障排除手冊(cè)可供參考兔乞,相信網(wǎng)上也會(huì)有大量的資源汇鞭。另外,因?yàn)槲矣?Mac 開發(fā)庸追,所以以下操作都是在 MacBook 進(jìn)行的霍骄。
制作第一個(gè) Android App
- Android Studio 初始界面
點(diǎn)擊第一個(gè)選項(xiàng) "Start a new Android Studio project"淡溯。
- 配置新工程
一共有四個(gè)參數(shù):
(1)Application name(應(yīng)用名)
顯示在 App 應(yīng)用欄上读整,也是 App 安裝后在設(shè)備上顯示的名稱;
(2)Company Domain(域名)
若無可保持默認(rèn)咱娶;
(3)Package name(安裝包名)
默認(rèn)由應(yīng)用名和域名的倒敘組成 apk 安裝包的名稱米间,可修改强品,安裝包名需要是獨(dú)一無二的。
(4)Project location(工程存放路徑)
工程會(huì)存放在名稱為應(yīng)用名的目錄內(nèi)屈糊,可修改的榛。
- 選擇 App 運(yùn)行設(shè)備和最低 SDK 版本
(1)App 運(yùn)行設(shè)備可選擇手機(jī)和平板 (Phone and Tablet)、可穿戴設(shè)備 (Wear)逻锐、電視 (TV)夫晌、汽車 (Android Auto)、物聯(lián)網(wǎng)設(shè)備 (Android Things)昧诱。
(2)最低 SDK 版本 (Minimum SDK) 可點(diǎn)擊 "Help me choose" 幫助選擇晓淀。例如選擇 "API 15: Android 4.0.3 (IceCreamSandwich)" 后,左側(cè)可見目前已支持所有 Android 設(shè)備盏档,右側(cè)列出支持的特性凶掰,如下圖所示。
低版本的 SDK 或 API 能支持更多的設(shè)備妆丘,但支持更少的特性锄俄。
- 選擇工程模板
Android Studio 提供了許多工程模板讓開發(fā)者能夠在模板的基礎(chǔ)上進(jìn)行開發(fā),此處選擇 Empty Activity勺拣。
- 為工程文件命名
工程由許多不同類型的文件組成,如圖片文件鱼填、聲音文件药有、XML 文件、Java 文件等苹丸,可以根據(jù) App 需求將他們的名稱進(jìn)行修改愤惰,此處保持默認(rèn)。最后點(diǎn)擊 Finish 完成赘理。
- 等待底部狀態(tài)欄加載完成宦言,工程新建完畢
需要注意的是,雖然 Google 一直都致力于改善 Android 平臺(tái)商模,添加一些出色的新功能奠旺,這對(duì)開發(fā)者來說是個(gè)好事,但是有時(shí)候也會(huì)給教育帶來難題施流。最近响疚,Google 推出了“約束布局 (ConstraintLayout)”,它包含各種不同的組件瞪醋,讓開發(fā)者能快速制作自適應(yīng) UI忿晕。盡管如此,但在本課程中银受,仍將使用更簡(jiǎn)單的 RelativeLayout 和 LinearLayout践盼。因此鸦采,打開 "app/src/main/res/layout/activity_main.xml" 將以下代碼替換 Android Studio 自動(dòng)生成的 ConstraintLayout 代碼。
<?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"
tools:context="com.example.hsujin.helloworld.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
Android Studio 的界面看上去很復(fù)雜咕幻,但其實(shí)不用了解所有的按鈕渔伯,只需要在用到時(shí)查詢即可。此時(shí)只需要關(guān)注三點(diǎn):
- 左側(cè) Project 標(biāo)簽顯示了工程文件樹谅河,雙擊文件會(huì)在中間打開咱旱;
- 文件底部有兩個(gè)標(biāo)簽,一般在 Text 下編輯绷耍,文件會(huì)自動(dòng)保存吐限,善用撤銷 (cmd+z) 和重做 (cmd+shift+z);
- 右側(cè) Preview 標(biāo)簽實(shí)時(shí)顯示效果預(yù)覽褂始。
到此為止诸典,第一個(gè) Android App 就做好了。從 Android Studio 右側(cè)的 Preview 標(biāo)簽可以看到 App 會(huì)顯示 "Hello World!" 字樣崎苗,現(xiàn)在安裝到實(shí)際的 Android 設(shè)備驗(yàn)證狐粱。
首先在手機(jī)上開啟開發(fā)者選項(xiàng) (Developer options) 并勾選 USB 調(diào)試 (USB debugging);連接手機(jī)后(Windows 平臺(tái)需要安裝驅(qū)動(dòng))胆数。
準(zhǔn)備好后肌蜻,點(diǎn)擊 Android Studio 頂部工具欄的綠色播放按鈕或快捷鍵 "shift+F10" 運(yùn)行 App,稍后會(huì)出現(xiàn)設(shè)備選擇界面必尼,選擇已連接的設(shè)備蒋搜,點(diǎn)擊 OK 即可。
如果想用模擬器來仿真 App判莉,則在上面的設(shè)備選擇界面點(diǎn)擊 "Create New Virtual Device" 新建一臺(tái)虛擬 Android 設(shè)備豆挽。如果虛擬設(shè)備啟動(dòng)后沒有自動(dòng)打開 App,可以再次點(diǎn)擊運(yùn)行按鈕 (shift+F10) 并選擇虛擬設(shè)備券盅,運(yùn)行結(jié)果如下圖所示帮哈。
這種方法會(huì)大量消耗電腦的性能,并存在 bugs锰镀,若要取得可靠的調(diào)試結(jié)果娘侍,建議使用硬件調(diào)試。
課程至此互站,我做了第一個(gè)實(shí)戰(zhàn)項(xiàng)目——商家信息應(yīng)用私蕾。這是個(gè)簡(jiǎn)單的 XML 練習(xí),源碼如下胡桃。
<?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"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:scaleType="centerCrop"
android:src="@drawable/borgesbookshop" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:text="Borges Bookshop. 小而精的獨(dú)立文學(xué)書店"
android:textColor="@android:color/black"
android:textSize="16sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="8dp"
android:text="不賣暢銷書踩叭,書籍按作者姓名字母排列擺放。"
android:textColor="@android:color/black"
android:textSize="16sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="地址:廣州市海珠區(qū)怡樂路95號(hào)二層"
android:textSize="15sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="8dp"
android:text="電話:020-83340575"
android:textSize="15sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="8dp"
android:text="電郵:borgeslibreria@vip.163.com"
android:textSize="15sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="8dp"
android:text="微博:http://weibo.com/cantonbon"
android:textSize="15sp" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="博\n爾\n赫\(chéng)n斯\n書\n店"
android:textColor="@android:color/white"
android:textSize="34sp"
android:textStyle="bold" />
</RelativeLayout>
App 效果如圖所示。
這個(gè) App 雖然非常簡(jiǎn)單容贝,但也有幾點(diǎn)需要注意的基礎(chǔ)知識(shí)點(diǎn)自脯。
- 文字要重疊在圖片之上,所以 TextView 要放在 ImageView 的下面斤富。最先放上的 Views 在最底層膏潮,依次層疊。
- 在 ImageView 中满力,圖片 borgesbookshop 需要放在 drawable 目錄中焕参,在 Android Studio 左側(cè)工程文件樹中展開 res (resource),右鍵 drawable 點(diǎn)擊 "Reveal in Finder" 即可跳到 drawable 目錄油额。注意文件名只能是小寫字母或數(shù)字叠纷,不能出現(xiàn)大寫字母或符號(hào)。
- ImageView 的寬度和高度設(shè)置為 "wrap_content" 時(shí)潦嘶,在手機(jī)等小屏設(shè)備上可能能占滿屏幕涩嚣,但對(duì)于平板等大屏設(shè)備仍然會(huì)在屏幕上顯示大片空白,所以 ImageView 的寬度和高度建議設(shè)置為 "match_parent"掂僵,并與 centerCrop 配合使用航厚。
- 對(duì)于一些由更高的 API 支持的屬性,例如 fontFamily 屬性只能在 API 16 以上的版本使用锰蓬,這種情況下幔睬,運(yùn)行在 API 15 或以下的設(shè)備不受影響,運(yùn)行 API 16 或以上的設(shè)備對(duì)屬性有效芹扭。
- 對(duì)于新手溪窒,每完成一步都運(yùn)行 App 到手機(jī)進(jìn)行驗(yàn)證是一個(gè)良好的習(xí)慣。