課程實(shí)踐 1: 制作第一個(gè) Android App

這是 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)拧簸。

  1. 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)
  1. 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
  1. Android Studio 初始界面
目前最新版本為 V3.0.1,從 V3.0.0 開始加入 Kotlin 支持

點(diǎn)擊第一個(gè)選項(xiàng) "Start a new Android Studio project"淡溯。

  1. 配置新工程

一共有四個(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)屈糊,可修改的榛。

  1. 選擇 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è)備妆丘,但支持更少的特性锄俄。

  1. 選擇工程模板

Android Studio 提供了許多工程模板讓開發(fā)者能夠在模板的基礎(chǔ)上進(jìn)行開發(fā),此處選擇 Empty Activity勺拣。

  1. 為工程文件命名

工程由許多不同類型的文件組成,如圖片文件鱼填、聲音文件药有、XML 文件、Java 文件等苹丸,可以根據(jù) App 需求將他們的名稱進(jìn)行修改愤惰,此處保持默認(rèn)。最后點(diǎn)擊 Finish 完成赘理。

  1. 等待底部狀態(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):

  1. 左側(cè) Project 標(biāo)簽顯示了工程文件樹谅河,雙擊文件會(huì)在中間打開咱旱;
  2. 文件底部有兩個(gè)標(biāo)簽,一般在 Text 下編輯绷耍,文件會(huì)自動(dòng)保存吐限,善用撤銷 (cmd+z) 和重做 (cmd+shift+z);
  3. 右側(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 即可。

Nexus 6P 手機(jī)已連接
App 在手機(jī)上的實(shí)際效果

如果想用模擬器來仿真 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é)果如下圖所示帮哈。

App 在虛擬設(shè)備上的效果

這種方法會(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 效果如圖所示。

商家信息應(yīng)用

這個(gè) App 雖然非常簡(jiǎn)單容贝,但也有幾點(diǎn)需要注意的基礎(chǔ)知識(shí)點(diǎn)自脯。

  1. 文字要重疊在圖片之上,所以 TextView 要放在 ImageView 的下面斤富。最先放上的 Views 在最底層膏潮,依次層疊。
  2. 在 ImageView 中满力,圖片 borgesbookshop 需要放在 drawable 目錄中焕参,在 Android Studio 左側(cè)工程文件樹中展開 res (resource),右鍵 drawable 點(diǎn)擊 "Reveal in Finder" 即可跳到 drawable 目錄油额。注意文件名只能是小寫字母或數(shù)字叠纷,不能出現(xiàn)大寫字母或符號(hào)。
  3. ImageView 的寬度和高度設(shè)置為 "wrap_content" 時(shí)潦嘶,在手機(jī)等小屏設(shè)備上可能能占滿屏幕涩嚣,但對(duì)于平板等大屏設(shè)備仍然會(huì)在屏幕上顯示大片空白,所以 ImageView 的寬度和高度建議設(shè)置為 "match_parent"掂僵,并與 centerCrop 配合使用航厚。
  4. 對(duì)于一些由更高的 API 支持的屬性,例如 fontFamily 屬性只能在 API 16 以上的版本使用锰蓬,這種情況下幔睬,運(yùn)行在 API 15 或以下的設(shè)備不受影響,運(yùn)行 API 16 或以上的設(shè)備對(duì)屬性有效芹扭。
  5. 對(duì)于新手溪窒,每完成一步都運(yùn)行 App 到手機(jī)進(jìn)行驗(yàn)證是一個(gè)良好的習(xí)慣。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冯勉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子摹芙,更是在濱河造成了極大的恐慌灼狰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浮禾,死亡現(xiàn)場(chǎng)離奇詭異交胚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)盈电,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門蝴簇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匆帚,你說我怎么就攤上這事熬词。” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵互拾,是天一觀的道長(zhǎng)歪今。 經(jīng)常有香客問我,道長(zhǎng)颜矿,這世上最難降的妖魔是什么寄猩? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮骑疆,結(jié)果婚禮上田篇,老公的妹妹穿的比我還像新娘。我一直安慰自己箍铭,他們只是感情好泊柬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坡疼,像睡著了一般彬呻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柄瑰,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天闸氮,我揣著相機(jī)與錄音,去河邊找鬼教沾。 笑死蒲跨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的授翻。 我是一名探鬼主播或悲,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼堪唐!你這毒婦竟也來了巡语?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤淮菠,失蹤者是張志新(化名)和其女友劉穎男公,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體合陵,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枢赔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拥知。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踏拜。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖低剔,靈堂內(nèi)的尸體忽然破棺而出速梗,到底是詐尸還是另有隱情肮塞,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布镀琉,位于F島的核電站峦嗤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏屋摔。R本人自食惡果不足惜烁设,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钓试。 院中可真熱鬧装黑,春花似錦、人聲如沸弓熏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挽鞠。三九已至疚颊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間信认,已是汗流浹背材义。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嫁赏,地道東北人其掂。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像潦蝇,于是被迫代替她去往敵國(guó)和親款熬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容