本程式碼研究室是 Android Kotlin 基礎課程的一部分。使用程式碼研究室逐步完成程式碼課程後,您將能充分發揮本課程的潛能。所有課程程式碼研究室清單均列於 Android Kotlin 基礎程式碼研究室到達網頁。
須知事項
- 在 Kotlin 中建立基本 Android 應用程式。
- 在模擬器或裝置上執行 Android 應用程式。
LinearLayout
的基本概念。- 建立使用
LinearLayout
和TextView
的簡易應用程式。
課程內容
- 如何與
View
和ViewGroup
搭配運作。 - 如何使用
LinearLayout.
安排Activity
中的資料檢視 - 如何使用
ScrollView
顯示可捲動的內容。 - 如何變更
View
的顯示設定。 - 如何建立與使用字串和維度資源。
- 如何使用 Android Studio 的版面配置編輯器建立線性版面配置。
執行步驟
- 建立關於 MeMe 應用程式。
- 在版面配置中加入
TextView
,即可顯示你的名稱。 - 新增
ImageView.
- 加入
ScrollView
以顯示可捲動的文字。
您可在「關於我」應用程式中展示與自己相關的趣聞,也可以為親友或寵物自訂應用程式。這個應用程式會顯示名稱、「完成」按鈕、星號圖片和一些可捲動的文字。
在這項工作中,您會建立關於 MeMe Android Studio 專案。
- 如果 Android Studio 尚未開啟,請開啟 Android Studio。
- 如果專案已在 Android Studio 中開啟,請選取 [File > New > New Project]。
- 如果專案尚未開啟,請在「歡迎使用 Android Studio」對話方塊中選取 [+ 建立新 Android Studio 專案]。
- 在「Create New Project」對話方塊中,於「Phone and Tablet」分頁中選取 [Empty Activity] 範本。按一下 [Next]。
- 在下一個 Create New Project 對話方塊中,設置以下數據,然後將完成。
屬性 | 值 |
應用程式名稱 | 自我介紹 |
公司名稱 Android |
|
儲存位置資訊 | 保留預設位置,或將位置變更為您偏好的目錄。 |
語言 | Kotlin |
最低 API 級別 | API 19:Android 4.4 (KitKat) |
這項專案將支援免安裝應用程式 | 請勿勾選這個核取方塊。 |
使用 AndroidX 成果 | 勾選這個核取方塊。 |
Android Studio 需要一點時間產生專案檔案。
- 執行你的應用程式。你會在空白畫面上看到「Hello World」字串。
空白活動範本建立了一個空白活動 Mainactivity.kt
。這個範本也會建立名為「activity_main.xml
」的版面配置檔案。版面配置檔案的 ConstraintLayout
是其根層級 ViewGroup
,且其內容具有單一 TextView
。
在這項工作中,您會把產生的根 ViewGroup
變更為 LinearLayout
。您也可以垂直排列 UI 元素。
查看群組
ViewGroup
資料檢視包含「子項」資料檢視,也就是其他資料檢視和資料檢視群組。構成版面配置的資料檢視會以資料檢視階層架構,並以資料檢視群組做為根群組。
在 LinearLayout
資料檢視群組中,使用者介面元素會水平或垂直排列。
將根版面配置改成 LinearLayout
檢視群組:
- 選取 [Project > Android] 專案。在「
app/res/layout
」資料夾中,開啟activity_main.xml
檔案。 - 選取 [Text] (文字) 分頁標籤,然後將根檢視群組從
ConstraintLayout
變更為LinearLayout
。 - 移除
TextView
。在LinearLayout
元素中加入android:orientation
屬性並將其設為vertical
。
彙整前:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
更新後:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
</LinearLayout>
版面配置編輯器是 Android Studio 提供的視覺設計工具,透過「版面配置編輯器」,您可以把 UI 元素拖曳至設計編輯器,而不必手動編寫 XML 程式碼來建構應用程式的版面配置。
如要查看版面配置編輯器,請按一下 [設計] 分頁標籤。下方的螢幕截圖顯示版面配置編輯器的各個部分。
設計編輯器:在設計檢視模式和/或藍圖中呈現畫面版面配置。設計編輯器是版面配置編輯器的主要部分。
工具列:在設計編輯器中提供可在版面配置中設置按鈕的按鈕,您也可以變更部分版面配置屬性。舉例來說,如要在設計編輯器中變更版面配置的顯示方式,請使用 [選取設計介面] 下拉式選單:
- 使用設計功能,即可即時預覽版面配置。
- 您可以使用 Blueprint 查看每個檢視的外框。
- 使用設計 + 藍圖,並排顯示。
Palette:提供檢視和檢視群組清單,您可以將這些群組拖曳至版面配置或「元件樹狀結構」窗格中。
屬性:顯示目前所選資料檢視或資料檢視群組的屬性。如要切換完整的屬性清單和常用屬性,請使用窗格頂端的 圖示。
元件樹狀結構:以版面配置樹狀結構顯示版面配置階層。當您有某些小、隱藏或重疊的檢視項目無法在設計編輯器中選取時,就可以利用元件樹狀結構。
步驟 1:新增 TextView
- 如果
res/layout/activity_main.xml
檔案尚未開啟,請開啟該檔案。 - 切換至「Text」分頁 並檢查程式碼。程式碼具有
LinearLayout
做為其根檢視群組。(資料檢視群組是指內含其他資料檢視的資料檢視)。LinearLayout
有必填屬性layout_height
、layout_width
和orientation
,預設為vertical
。 - 切換至「設計」分頁以開啟版面配置編輯器。
- 將文字檢視從「調色盤」窗格拖曳到設計編輯器。
- 請注意「元件樹狀結構」窗格。新的文字檢視會列為上層檢視群組的子元素,也就是
LinearLayout
。 - 如果「屬性」窗格尚未開啟,請開啟 [屬性] 窗格。(如要開啟窗格,請在設計編輯器中,按兩下新增的
TextView
)。 - 在「屬性」窗格中設定下列屬性:
屬性 | 值 |
ID |
|
傳簡訊給 | 將其設為您的名稱。(其中一個 text 欄位會顯示扳手圖示,指出 |
textAppearance > textSize |
|
textAppearance > textColor |
|
textAppearance > textalignment | 中央 |
步驟 2:建立字串資源
在元件樹狀結構中,TextView,
旁邊會顯示警告圖示 。如要查看警告訊息,請按一下圖示或指向該文字,如下方的螢幕截圖所示。
如要解決警告,請建立字串資源:
- 在「屬性」窗格中,按一下您指定名稱的「文字」屬性旁邊的三點圖示。資源編輯器隨即開啟。
- 在「Resources」(資源) 對話方塊中,選取 [Add new resource > New string Value] (新增新資源(&G))。
- 在「新增字串值資源」對話方塊中,將「資源名稱」欄位設為
name
。將「Resource value」欄位設為您自己的名稱。按一下 [確定]。請注意,警告已經消失。 - 開啟
res/values/strings.xml
檔案並尋找名為name
的新字串資源。
<string name="name">Aleks Haecky</string>
步驟 3:建立維度資源
您已透過資源編輯器新增資源。您也可以在 XML 程式碼編輯器中擷取資源,以建立新資源:
- 在
activity_main.xml
檔案中,切換至 [Text] (文字) 分頁標籤。 - 在「
textSize
」行上,按一下數字 (20sp
) 並輸入Alt+Enter
(Mac 上則為Option+Enter
)。在彈出式選單中選取 [擷取維度資源]。 - 在「擷取資源」對話方塊中的 [資源名稱] 欄位中輸入
text_size
。按一下 [OK] (確定)。 - 開啟
res/values/dimens.xml
檔案以查看下列產生的程式碼:
<dimen name="text_size">20sp</dimen>
- 開啟
MainActivity.kt
檔案,並在onCreate()
函式結尾尋找以下程式碼:
setContentView(R.layout.activity_main)
setContentView()
函式會將版面配置檔案連結至 Activity
。指定的版面配置資源檔案是 R.layout.activity_main
:
R
是資源參照。這是自動產生的類別,其中定義了應用程式所有資源的定義。layout.activity_main
表示資源是名為activity_main
的版面配置。
- 執行您的應用程式。畫面中會顯示您的名稱的
TextView
。
查看應用程式畫面時,您的名稱會推送到螢幕頂端,現在您可以加上邊框間距和邊界。
邊框間距與邊界
邊框是指檢視或元素邊界內的空間。這是視圖邊緣與視圖內容之間的距離,如下圖所示。
資料檢視的大小包含其邊框間距。以下為常用的邊框間距屬性:
android:padding
用來指定視圖中所有四邊邊緣的邊框間距。android:paddingTop
用來指定頂端邊緣的邊框間距。android:paddingBottom
指定底端邊緣的邊框間距。android:paddingStart
指定了視圖「邊緣」的邊框間距。android:paddingEnd
為視圖的邊緣指定「邊框間距」。android:paddingLeft
指定左側邊緣的邊框間距。android:paddingRight
指定右側邊緣的邊框間距。
邊界是指檢視區塊外的空格。這是從視圖邊緣到父項 (如上圖所示) 的空間。以下是常用的邊界屬性:
android:layout_margin
用來指定視圖中所有四邊的邊界。android:layout_marginBottom
指定這個檢視畫面外圍的空格。android:layout_marginStart
指定在這個視圖的「起始」以外的位置。android:layout_marginEnd
指定畫面末端的空格。android:layout_marginLeft
指定這個視圖左側的空格。android:layout_marginRight
在這個畫面右側指定空格。
步驟 1:新增邊框間距
如要在名稱和 name
文字檢視的上方邊緣之間加入空格,請新增頂端邊框間距。
- 在「設計」分頁中開啟「
activity_main.xml
」檔案。 - 在元件樹狀結構或設計編輯器中,按一下文字檢視即可開啟「屬性」窗格。
- 在「屬性」窗格頂端,按一下雙箭頭圖示 ,即可查看所有可用的屬性。
- 搜尋並展開「邊框間距」,然後按一下「頂端」屬性旁邊的三點圖示 ...。系統隨即會顯示「資源」對話方塊。
- 在「Resources」(資源) 對話方塊中,選取 [Add new resource > New dimen Value] (新增資源(> New dimen Value))。
- 在「新增維度值資源」對話方塊中,建立名為
dimen
的新dimen
資源,其值為8dp
。
dp 縮寫代表「密度獨立」。如果希望使用者介面元素在不同密度的螢幕上看起來相同,請使用 dp 做為測量單位。不過,在指定文字大小時,請一律使用 sp (可縮放像素)。 - 按一下「OK」(確定)。
步驟 2:新增利潤
如要將 name
文字檢視從父項元素的邊緣移開,請新增頂端邊界。
- 在「Attribute」(屬性) 窗格中搜尋「quomargin;marginquoquo」以找出 Layout_Margin。
- 展開 Layout_Margin,然後按一下「top」屬性旁邊的三點圖示 ...。
- 建立名為「
layout_margin
」的新dimen
資源,並將其設為16dp
。按一下 [確定]。
步驟 3:新增字型
如要改善「name
」文字外觀,請使用 Android Roboto 字型。這個字型屬於支援資料庫的一部分,而您將字型新增為資源。
- 在屬性窗格中,搜尋「fontFamily」。
- 在 [fontFamily] 欄位中,點選下拉式箭頭,捲動至清單底部,然後選取 [更多字型]。
- 在「Resources」(資源) 對話方塊中,搜尋
rob
並選擇 [Roboto]。在「預覽」清單中,選取 [一般]。 - 選取 [在專案中新增字型] 圓形按鈕。
- 按一下 [OK]。
「res
」資料夾現在有 font
個資料夾,其中包含「roboto.ttf
」字型檔案。系統會將 @font/roboto
屬性新增至您的 TextView
。
步驟 4:擷取樣式
style 是一組屬性,用來指定視圖的外觀和格式。樣式可包含字型顏色、字型大小、背景色彩、邊框間距、邊界等常見屬性。
您可以擷取 name
文字檢視的格式,然後將其轉化為樣式,然後重複使用應用程式中所有樣式的樣式。使用樣式也能讓您將這些常見屬性集中在同一個位置。
- 在「元件樹狀結構」中,以滑鼠右鍵按一下
TextView
,然後選取 [重新計算 &擷取樣式]。 - 在「擷取 Android 樣式」對話方塊中,取消勾選
layout_width
核取方塊、layout_height
核取方塊和textAlignment
核取方塊。這些屬性對每項資料檢視來說通常都不一樣,因此您不希望這種屬性成為樣式的一部分。 - 在「Style name」(樣式名稱) 欄位中,輸入
NameStyle
。 - 按一下 [OK] (確定)。
- 樣式也是資源,因此樣式會儲存在
styles.xml
檔案的res/values/
資料夾中。開啟styles.xml
並檢查系統為NameStyle
樣式產生的程式碼,如下所示:
<style name="NameStyle">
<item name="android:layout_marginTop">@dimen/layout_margin</item>
<item name="android:fontFamily">@font/roboto</item>
<item name="android:paddingTop">@dimen/small_padding</item>
<item name="android:textColor">@android:color/black</item>
<item name="android:textSize">@dimen/text_size</item>
</style>
- 開啟
activity_main.xml
並切換至 [文字] 分頁標籤。請注意,您產生的樣式在文字檢視中使用的是style="@style/NameStyle"
。 - 執行應用程式並留意
TextView
周圍的字型和邊框間距。
大部分的 Android 應用程式都是由不同檢視組合構成的顯示圖片、文字顯示,以及透過文字或點擊事件的形式接受使用者輸入內容。在這項工作中,您會加入檢視以顯示圖片。
ImageView
是顯示圖片資源的檢視畫面,舉例來說,ImageView
可以顯示 Bitmap
資源 (例如 PNG、JPG、GIF 或 WebP 檔案),也可以顯示 Drawable
資源 (例如向量繪圖)。
Android 隨附圖片資源,例如圖示、顯示圖片和背景。您會把其中一項資源加到應用程式。
- 在「設計」分頁中顯示版面配置檔案,接著在「元件樹狀結構」的「Palette」窗格中,將 ImageView 拖曳到「
name_text
」下方。「資源」對話方塊隨即開啟。 - 選取 [可繪項目] (如果尚未選取)。
- 展開 android、捲動並選取 [btn_star_big_on]。今天是黃色 星星。
- 按一下「OK」(確定)。
星號圖片會顯示在您的名稱下方的版面配置中。由於您有垂直LinearLayout
,因此新增的檢視會垂直對齊。 - 切換至「Text」分頁並查看產生的
ImageView
程式碼。寬度已設為match_parent
,因此視圖的寬度會和父項元素寬度相同。高度已設為wrap_content
,因此視圖的高度與內容高度相同。ImageView
參照btn_star_big_on
可繪項目。
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srcCompat="@android:drawable/btn_star_big_on" />
- 如要重新命名「
ImageView
」的「id
」,請在"@+id/imageView"
上按一下滑鼠右鍵,然後選取 [重新計算] > [重新命名]。 - 在「重新命名」對話方塊中,將
id
設為@+id/star_image
。按一下 [重構]。
- 在「設計」分頁的「元件樹狀結構」中,按一下
star_image
旁邊的警告圖示 。警告是缺少contentDescription
遺漏的螢幕閱讀器,用來向使用者說明圖片內容。 - 在「屬性」窗格中,按一下
contentDescription
屬性旁邊的三點圖示 ...。「資源」對話方塊隨即開啟。 - 在「Resources」(資源) 對話方塊中,選取 [Add new resource > New string Value] (新增新資源(&G))。將「資源名稱」欄位設為
yellow_star
,並將「Resource value」欄位設為Yellow star
。按一下 [確定]。 - 使用「屬性」窗格為
yellow_star
加上16dp
(@dimen/layout_margin
) 的上方邊界,將星號圖片與名稱分開。 - 執行您的應用程式。您的姓名和星號圖片會顯示在應用程式的 UI 中。
ScrollView
是一個檢視群組,可讓使用者在其中捲動檢視其中的檢視階層。捲動畫面只能包含一個子檢視 (或一個檢視區塊) 的子元素。子視圖通常為 LinearLayout
。在 LinearLayout
中,您可以新增其他檢視。
下圖顯示 ScrollView
的範例,其中的 LinearLayout
包含其他多項檢視表。
在這項工作中,您會加入 ScrollView
,讓使用者捲動顯示簡介書的文字檢視。如果只是將一個資料檢視設為可捲動,您可以將該資料檢視直接加入 ScrollView
,也就是您在這項工作中所做的動作。
步驟 1:新增包含 TextView 的捲動檢視
- 在「設計」分頁中開啟
activity_main.xml
檔案。 - 將捲動檢視拖曳到版面配置中,或將其拖曳到設計樹狀結構中。將捲動畫面放在星號圖片下方。
- 切換至「Text」分頁以檢查產生的程式碼。
// Auto generated code
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</ScrollView>
ScrollView
的高度與寬度與父項元素相符。當 name_text
文字檢視和 star_image
圖片檢視使用足夠的垂直空間顯示內容後,Android 系統就會顯示 ScrollView
,填滿螢幕上的可用空間。
- 在
ScrollView
中加入id
並呼叫bio_scroll
。將id
新增至ScrollView
,可為 Android 系統提供檢視控點,讓使用者旋轉裝置時,系統會保留捲動位置。 - 在
ScrollView
內移除LinearLayout
程式碼,因為您的應用程式只會有一個可供捲動的檢視畫面,也就是TextView
。 - 將
TextView
從 Palette 拖曳到「Component Tree」。將TextView
置於bio_scroll
之下,做為bio_scroll
的子項元素。 - 將新文字檢視的 id 設為
bio_text
。 - 接著,為新的文字檢視新增樣式。在「屬性」窗格中,按一下「style」屬性旁邊的三點圖示 ...,即可開啟「Resources」(資源) 對話方塊。
- 在「Resources」(資源) 對話方塊中,搜尋
NameStyle
。從清單中選取NameStyle
,然後按一下 [確定]。文字檢視現在會使用您在先前工作中建立的NameStyle
樣式。
步驟 2:在新版 TextView 中新增簡介
- 開啟「
strings.xml
」,建立名稱為「bio
」的字串資源,並撰寫一些關於您自己的長篇內容,或是任何您想要的文字。
以下是傳記範例:
<string name="bio">Hi, my name is Aleks.
\n\nI love fish.
\n\nThe kind that is alive and swims around in an aquarium or river, or a lake, and definitely the ocean.
\nFun fact is that I have several aquariums and also a river.
\n\nI like eating fish, too. Raw fish. Grilled fish. Smoked fish. Poached fish - not so much.
\nAnd sometimes I even go fishing.
\nAnd even less sometimes, I actually catch something.
\n\nOnce, when I was camping in Canada, and very hungry, I even caught a large salmon with my hands.
\n\nI\'ll be happy to teach you how to make your own aquarium.
\nYou should ask someone else about fishing, though.\n\n</string>
- 在
bio_text
文字檢視畫面中,將text
屬性的值設為包含簡介的bio
字串資源。 - 如要使
bio_text
文字更容易閱讀,請在兩行之間加入空格。使用lineSpacingMultiplier
屬性,並提供1.2
值。
請注意,在設計編輯器中,bio
文字會一直顯示在畫面側邊。如要修正這個問題,您可以在根LinearLayout
中加入左側、開始、右側和結尾的填充屬性。不需要新增底部邊框間距,因為文字由右至左發出,能讓使用者知道文字可捲動。 - 將
16dp
的開始與結束填充加到根目錄LinearLayout
。 - 切換至「Text」分頁,擷取維度資源並命名為
layout_padding
。
- 執行應用程式並捲動瀏覽文字。
恭喜!
您已從頭建立完整的應用程式,看起來很不錯!
Android Studio 專案:關於 Me
在 ScrollView
內,在 TextView
上方新增 ImageView
。執行應用程式時,這張圖片與星號不同,當文字捲動時,畫面會彈出檢視。
提示:捲動畫面只能有一個子檢視。您必須將兩個可捲動的檢視畫面 ImageView
和 TextView
納入 LinearLayout
中。
ViewGroup
是一種可以包含其他資料檢視的資料檢視。LinearLayout
和ScrollView
是檢視群組。- 「
LinearLayout
」檢視方式是水平或垂直排列的子視圖。 - 如要在螢幕上顯示內容 (例如長篇文字或是一系列圖片),請使用
ScrollView
。捲動檢視畫面只能包含一個子檢視。若要捲動多個檢視畫面,請在ScrollView
中加入ViewGroup
(例如LinearLayout
),並且將檢視區塊捲動到該ViewGroup
內。 - 版面配置編輯器是 Android Studio 中的視覺設計編輯器,您可以使用版面配置編輯器,將 UI 元素拖曳至版面配置,以建立應用程式版面配置。
- 樣式是指定檢視外觀的屬性組合。舉例來說,樣式可以指定字型顏色、字型大小、背景色彩、邊框間距和邊界。
- 您可以擷取檢視並將所有樣式格式化為樣式。為了讓應用程式保持一致,請將樣式重複用於其他檢視畫面。
Udacity 課程:
Android 開發人員說明文件:
這個部分會列出在代碼研究室中,受老師主導的課程作業的可能學生作業。由老師自行決定要執行下列動作:
- 視需要指派家庭作業。
- 告知學生如何提交家庭作業。
- 批改家庭作業。
老師可視需要使用這些建議,並視情況指派其他合適的家庭作業。
如果您是自行操作本程式碼研究室,歡迎透過這些家庭作業來測試自己的知識。
回答這些問題
第 1 題
下列何者屬於檢視群組?
▢ EditText
▢ LinearLayout
▢ TextView
▢ Button
第 2 題
下列哪一個資料檢視階層無效?
▢ LinearLayout
> TextView
、TextView
、ImageView
▢ ScrollView
> LinearLayout
> TextView
, Button
, Button
, ScrollView
> TextView
▢ TextView
> TextView
、ImageView
、ScrollView
第 3 題
樣式是 styles.xml
中定義的資源。您可以透過樣式定義顏色、字型、文字大小,以及許多其他視圖特性。下列敘述是否正確?
▢ 是
▢ 否
第 4 題
「ScrollView
」是一種資料檢視群組,當中可以包含任意數量的資料檢視或檢視區塊做為子群組。下列敘述是否正確?
▢ 是
▢ 否
第 5 題
哪一項 UI 元素可用來在應用程式中顯示圖片?
▢ TextView
▢ ImageView
▢ Button
▢ ScrollView
開始下一門課程:
如要瞭解本課程中其他程式碼研究室的連結,請參閱 Android Kotlin 基礎程式碼程式碼到達網頁。