Android Kotlin 基礎課程 02.1:使用版面配置編輯器調整線性版面配置

本程式碼研究室是 Android Kotlin 基礎課程的一部分。使用程式碼研究室逐步完成程式碼課程後,您將能充分發揮本課程的潛能。所有課程程式碼研究室清單均列於 Android Kotlin 基礎程式碼研究室到達網頁

須知事項

  • 在 Kotlin 中建立基本 Android 應用程式。
  • 在模擬器或裝置上執行 Android 應用程式。
  • LinearLayout的基本概念。
  • 建立使用 LinearLayoutTextView 的簡易應用程式。

課程內容

  • 如何與 ViewViewGroup 搭配運作。
  • 如何使用 LinearLayout. 安排 Activity 中的資料檢視
  • 如何使用 ScrollView 顯示可捲動的內容。
  • 如何變更View的顯示設定。
  • 如何建立與使用字串和維度資源。
  • 如何使用 Android Studio 的版面配置編輯器建立線性版面配置。

執行步驟

  • 建立關於 MeMe 應用程式。
  • 在版面配置中加入 TextView,即可顯示你的名稱。
  • 新增ImageView.
  • 加入ScrollView以顯示可捲動的文字。

您可在「關於我」應用程式中展示與自己相關的趣聞,也可以為親友或寵物自訂應用程式。這個應用程式會顯示名稱、「完成」按鈕、星號圖片和一些可捲動的文字。

在這項工作中,您會建立關於 MeMe Android Studio 專案。

  1. 如果 Android Studio 尚未開啟,請開啟 Android Studio。
  2. 如果專案已在 Android Studio 中開啟,請選取 [File > New > New Project]


  3. 如果專案尚未開啟,請在「歡迎使用 Android Studio」對話方塊中選取 [+ 建立新 Android Studio 專案]


  4. 在「Create New Project」對話方塊中,於「Phone and Tablet」分頁中選取 [Empty Activity] 範本。按一下 [Next]


  5. 在下一個 Create New Project 對話方塊中,設置以下數據,然後將完成

屬性

應用程式名稱

自我介紹

公司名稱 Android

com.android.example.AboutMe (或您自己的網域)

儲存位置資訊

保留預設位置,或將位置變更為您偏好的目錄。

語言

Kotlin

最低 API 級別

API 19:Android 4.4 (KitKat)

這項專案將支援免安裝應用程式

請勿勾選這個核取方塊。

使用 AndroidX 成果

勾選這個核取方塊。

Android Studio 需要一點時間產生專案檔案。

  1. 執行你的應用程式。你會在空白畫面上看到「Hello World」字串。

空白活動範本建立了一個空白活動 Mainactivity.kt。這個範本也會建立名為「activity_main.xml」的版面配置檔案。版面配置檔案的 ConstraintLayout 是其根層級 ViewGroup,且其內容具有單一 TextView

在這項工作中,您會把產生的根 ViewGroup 變更為 LinearLayout。您也可以垂直排列 UI 元素。

查看群組

ViewGroup 資料檢視包含「子項」資料檢視,也就是其他資料檢視和資料檢視群組。構成版面配置的資料檢視會以資料檢視階層架構,並以資料檢視群組做為根群組。

LinearLayout 資料檢視群組中,使用者介面元素會水平或垂直排列。

將根版面配置改成 LinearLayout 檢視群組:

  1. 選取 [Project > Android] 專案。在「app/res/layout資料夾中,開啟 activity_main.xml 檔案。
  2. 選取 [Text] (文字) 分頁標籤,然後將根檢視群組從 ConstraintLayout 變更為 LinearLayout
  3. 移除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

  1. 如果 res/layout/activity_main.xml 檔案尚未開啟,請開啟該檔案。
  2. 切換至「Text」分頁 並檢查程式碼。程式碼具有 LinearLayout 做為其根檢視群組。(資料檢視群組是指內含其他資料檢視的資料檢視)。

    LinearLayout 有必填屬性 layout_heightlayout_widthorientation,預設為 vertical
  3. 切換至「設計」分頁以開啟版面配置編輯器。
  1. 將文字檢視從「調色盤」窗格拖曳到設計編輯器。


  2. 請注意「元件樹狀結構」窗格。新的文字檢視會列為上層檢視群組的子元素,也就是 LinearLayout

  3. 如果「屬性」窗格尚未開啟,請開啟 [屬性] 窗格。(如要開啟窗格,請在設計編輯器中,按兩下新增的 TextView)。
  4. 在「屬性」窗格中設定下列屬性:

屬性

ID

name_text

傳簡訊給

將其設為您的名稱。(其中一個 text 欄位會顯示扳手圖示,指出 tools 命名空間的圖示。不含扳手的 android 命名空間就是您要的 text 欄位。)

textAppearance > textSize

20sp

textAppearance > textColor

@android:color/black

textAppearance > textalignment

中央

步驟 2:建立字串資源

元件樹狀結構中,TextView, 旁邊會顯示警告圖示 。如要查看警告訊息,請按一下圖示或指向該文字,如下方的螢幕截圖所示。

如要解決警告,請建立字串資源:

  1. 在「屬性」窗格中,按一下您指定名稱的「文字」屬性旁邊的三點圖示。資源編輯器隨即開啟。


  2. 在「Resources」(資源) 對話方塊中,選取 [Add new resource > New string Value] (新增新資源(&G))
  3. 在「新增字串值資源」對話方塊中,將「資源名稱」欄位設為 name。將「Resource value」欄位設為您自己的名稱。按一下 [確定]。請注意,警告已經消失。


  4. 開啟 res/values/strings.xml 檔案並尋找名為 name 的新字串資源。
<string name="name">Aleks Haecky</string>

步驟 3:建立維度資源

您已透過資源編輯器新增資源。您也可以在 XML 程式碼編輯器中擷取資源,以建立新資源:

  1. activity_main.xml 檔案中,切換至 [Text] (文字) 分頁標籤。
  2. 在「textSize」行上,按一下數字 (20sp) 並輸入 Alt+Enter (Mac 上則為 Option+Enter)。在彈出式選單中選取 [擷取維度資源]
  3. 在「擷取資源」對話方塊中的 [資源名稱] 欄位中輸入 text_size。按一下 [OK] (確定)


  4. 開啟 res/values/dimens.xml 檔案以查看下列產生的程式碼:
<dimen name="text_size">20sp</dimen>
  1. 開啟 MainActivity.kt 檔案,並在 onCreate() 函式結尾尋找以下程式碼:
setContentView(R.layout.activity_main)

setContentView() 函式會將版面配置檔案連結至 Activity。指定的版面配置資源檔案是 R.layout.activity_main

  • R 是資源參照。這是自動產生的類別,其中定義了應用程式所有資源的定義。
  • layout.activity_main 表示資源是名為 activity_main 的版面配置。
  1. 執行您的應用程式。畫面中會顯示您的名稱的TextView

查看應用程式畫面時,您的名稱會推送到螢幕頂端,現在您可以加上邊框間距和邊界。

邊框間距與邊界

邊框是指檢視或元素邊界內的空間。這是視圖邊緣與視圖內容之間的距離,如下圖所示。

資料檢視的大小包含其邊框間距。以下為常用的邊框間距屬性:

邊界是指檢視區塊外的空格。這是從視圖邊緣到父項 (如上圖所示) 的空間。以下是常用的邊界屬性:

步驟 1:新增邊框間距

如要在名稱和 name 文字檢視的上方邊緣之間加入空格,請新增頂端邊框間距。

  1. 在「設計」分頁中開啟「activity_main.xml」檔案。
  2. 元件樹狀結構或設計編輯器中,按一下文字檢視即可開啟「屬性」窗格。
  3. 在「屬性」窗格頂端,按一下雙箭頭圖示 ,即可查看所有可用的屬性。
  4. 搜尋並展開「邊框間距」,然後按一下「頂端」屬性旁邊的三點圖示 ...。系統隨即會顯示「資源」對話方塊。
  5. 在「Resources」(資源) 對話方塊中,選取 [Add new resource > New dimen Value] (新增資源(> New dimen Value))
  6. 在「新增維度值資源」對話方塊中,建立名為 dimen 的新 dimen 資源,其值為 8dp

    dp 縮寫代表「密度獨立」。如果希望使用者介面元素在不同密度的螢幕上看起來相同,請使用 dp 做為測量單位。不過,在指定文字大小時,請一律使用 sp (可縮放像素)。
  7. 按一下「OK」(確定)

步驟 2:新增利潤

如要將 name 文字檢視從父項元素的邊緣移開,請新增頂端邊界。

  1. 在「Attribute」(屬性) 窗格中搜尋「quomargin;marginquoquo」以找出 Layout_Margin
  2. 展開 Layout_Margin,然後按一下「top」屬性旁邊的三點圖示 ...
  3. 建立名為「layout_margin」的新 dimen 資源,並將其設為 16dp按一下 [確定]。

步驟 3:新增字型

如要改善「name」文字外觀,請使用 Android Roboto 字型。這個字型屬於支援資料庫的一部分,而您將字型新增為資源。

  1. 屬性窗格中,搜尋「fontFamily」。
  2. 在 [fontFamily] 欄位中,點選下拉式箭頭,捲動至清單底部,然後選取 [更多字型]
  3. 在「Resources」(資源) 對話方塊中,搜尋 rob 並選擇 [Roboto]。在「預覽」清單中,選取 [一般]
  4. 選取 [在專案中新增字型] 圓形按鈕。
  5. 按一下 [OK]

res」資料夾現在有 font 個資料夾,其中包含「roboto.ttf」字型檔案。系統會將 @font/roboto 屬性新增至您的 TextView

步驟 4:擷取樣式

style 是一組屬性,用來指定視圖的外觀和格式。樣式可包含字型顏色、字型大小、背景色彩、邊框間距、邊界等常見屬性。

您可以擷取 name 文字檢視的格式,然後將其轉化為樣式,然後重複使用應用程式中所有樣式的樣式。使用樣式也能讓您將這些常見屬性集中在同一個位置。

  1. 在「元件樹狀結構」中,以滑鼠右鍵按一下 TextView,然後選取 [重新計算 &擷取樣式]
  2. 在「擷取 Android 樣式」對話方塊中,取消勾選 layout_width 核取方塊、layout_height 核取方塊和 textAlignment 核取方塊。這些屬性對每項資料檢視來說通常都不一樣,因此您不希望這種屬性成為樣式的一部分。
  3. 在「Style name」(樣式名稱) 欄位中,輸入 NameStyle
  4. 按一下 [OK] (確定)


  5. 樣式也是資源,因此樣式會儲存在 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>
  1. 開啟 activity_main.xml 並切換至 [文字] 分頁標籤。請注意,您產生的樣式在文字檢視中使用的是 style="@style/NameStyle"
  2. 執行應用程式並留意 TextView 周圍的字型和邊框間距。

大部分的 Android 應用程式都是由不同檢視組合構成的顯示圖片、文字顯示,以及透過文字或點擊事件的形式接受使用者輸入內容。在這項工作中,您會加入檢視以顯示圖片。

ImageView 是顯示圖片資源的檢視畫面,舉例來說,ImageView 可以顯示 Bitmap 資源 (例如 PNG、JPG、GIF 或 WebP 檔案),也可以顯示 Drawable 資源 (例如向量繪圖)。

Android 隨附圖片資源,例如圖示、顯示圖片和背景。您會把其中一項資源加到應用程式。

  1. 在「設計」分頁中顯示版面配置檔案,接著在「元件樹狀結構」的「Palette」窗格中,將 ImageView 拖曳到「name_text」下方。「資源」對話方塊隨即開啟。
  2. 選取 [可繪項目] (如果尚未選取)。
  3. 展開 android、捲動並選取 [btn_star_big_on]。今天是黃色 星星。
  4. 按一下「OK」(確定)



    星號圖片會顯示在您的名稱下方的版面配置中。由於您有垂直LinearLayout,因此新增的檢視會垂直對齊。

  5. 切換至「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" />
  1. 如要重新命名「ImageView」的「id」,請在 "@+id/imageView" 上按一下滑鼠右鍵,然後選取 [重新計算] > [重新命名]
  2. 在「重新命名」對話方塊中,將 id 設為 @+id/star_image。按一下 [重構]


  1. 在「設計」分頁的「元件樹狀結構」中,按一下 star_image 旁邊的警告圖示 。警告是缺少contentDescription遺漏的螢幕閱讀器,用來向使用者說明圖片內容。
  2. 在「屬性」窗格中,按一下 contentDescription 屬性旁邊的三點圖示 ...。「資源」對話方塊隨即開啟。
  3. 在「Resources」(資源) 對話方塊中,選取 [Add new resource > New string Value] (新增新資源(&G))。將「資源名稱」欄位設為 yellow_star,並將「Resource value」欄位設為 Yellow star按一下 [確定]。
  4. 使用「屬性」窗格為 yellow_star 加上 16dp (@dimen/layout_margin) 的上方邊界,將星號圖片與名稱分開。
  5. 執行您的應用程式。您的姓名和星號圖片會顯示在應用程式的 UI 中。

ScrollView 是一個檢視群組,可讓使用者在其中捲動檢視其中的檢視階層。捲動畫面只能包含一個子檢視 (或一個檢視區塊) 的子元素。子視圖通常為 LinearLayout。在 LinearLayout 中,您可以新增其他檢視。

下圖顯示 ScrollView 的範例,其中的 LinearLayout 包含其他多項檢視表。

捲動檢視內含線性版面配置,其中包含其他多種檢視。

在這項工作中,您會加入 ScrollView,讓使用者捲動顯示簡介書的文字檢視。如果只是將一個資料檢視設為可捲動,您可以將該資料檢視直接加入 ScrollView,也就是您在這項工作中所做的動作。

這個 ViewView 包含單一 TextView

步驟 1:新增包含 TextView 的捲動檢視

  1. 在「設計」分頁中開啟 activity_main.xml 檔案。
  2. 將捲動檢視拖曳到版面配置中,或將其拖曳到設計樹狀結構中。將捲動畫面放在星號圖片下方。
  3. 切換至「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,填滿螢幕上的可用空間。

  1. ScrollView中加入id並呼叫 bio_scroll。將 id 新增至 ScrollView,可為 Android 系統提供檢視控點,讓使用者旋轉裝置時,系統會保留捲動位置。
  2. ScrollView 內移除 LinearLayout 程式碼,因為您的應用程式只會有一個可供捲動的檢視畫面,也就是 TextView
  3. TextViewPalette 拖曳到「Component Tree」。將 TextView 置於 bio_scroll 之下,做為 bio_scroll 的子項元素。

  4. 將新文字檢視的 id 設為 bio_text
  5. 接著,為新的文字檢視新增樣式。在「屬性」窗格中,按一下「style」屬性旁邊的三點圖示 ...,即可開啟「Resources」(資源) 對話方塊。
  6. 在「Resources」(資源) 對話方塊中,搜尋 NameStyle。從清單中選取 NameStyle,然後按一下 [確定]。文字檢視現在會使用您在先前工作中建立的 NameStyle 樣式。

步驟 2:在新版 TextView 中新增簡介

  1. 開啟「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>
  1. bio_text 文字檢視畫面中,將 text 屬性的值設為包含簡介的 bio 字串資源。
  2. 如要使 bio_text 文字更容易閱讀,請在兩行之間加入空格。使用 lineSpacingMultiplier 屬性,並提供 1.2 值。



    請注意,在設計編輯器中,bio 文字會一直顯示在畫面側邊。如要修正這個問題,您可以在根 LinearLayout 中加入左側、開始、右側和結尾的填充屬性。不需要新增底部邊框間距,因為文字由右至左發出,能讓使用者知道文字可捲動。
  3. 16dp 的開始與結束填充加到根目錄 LinearLayout
  4. 切換至「Text」分頁,擷取維度資源並命名為 layout_padding

  1. 執行應用程式並捲動瀏覽文字。

恭喜!

您已從頭建立完整的應用程式,看起來很不錯!

Android Studio 專案:關於 Me

ScrollView 內,在 TextView 上方新增 ImageView。執行應用程式時,這張圖片與星號不同,當文字捲動時,畫面會彈出檢視。

提示:捲動畫面只能有一個子檢視。您必須將兩個可捲動的檢視畫面 ImageViewTextView 納入 LinearLayout 中。

  • ViewGroup 是一種可以包含其他資料檢視的資料檢視。LinearLayoutScrollView是檢視群組。
  • LinearLayout」檢視方式是水平或垂直排列的子視圖。
  • 如要在螢幕上顯示內容 (例如長篇文字或是一系列圖片),請使用 ScrollView。捲動檢視畫面只能包含一個子檢視。若要捲動多個檢視畫面,請在 ScrollView 中加入 ViewGroup (例如 LinearLayout),並且將檢視區塊捲動到該 ViewGroup 內。
  • 版面配置編輯器是 Android Studio 中的視覺設計編輯器,您可以使用版面配置編輯器,將 UI 元素拖曳至版面配置,以建立應用程式版面配置。
  • 樣式是指定檢視外觀的屬性組合。舉例來說,樣式可以指定字型顏色、字型大小、背景色彩、邊框間距和邊界。
  • 您可以擷取檢視並將所有樣式格式化為樣式。為了讓應用程式保持一致,請將樣式重複用於其他檢視畫面。

Udacity 課程:

Android 開發人員說明文件:

這個部分會列出在代碼研究室中,受老師主導的課程作業的可能學生作業。由老師自行決定要執行下列動作:

  • 視需要指派家庭作業。
  • 告知學生如何提交家庭作業。
  • 批改家庭作業。

老師可視需要使用這些建議,並視情況指派其他合適的家庭作業。

如果您是自行操作本程式碼研究室,歡迎透過這些家庭作業來測試自己的知識。

回答這些問題

第 1 題

下列何者屬於檢視群組?

EditText

LinearLayout

TextView

Button

第 2 題

下列哪一個資料檢視階層無效?

LinearLayout > TextViewTextViewImageView

ScrollView > LinearLayout > TextView, Button, Button, ScrollView > TextView

TextView > TextViewImageViewScrollView

第 3 題

樣式是 styles.xml 中定義的資源。您可以透過樣式定義顏色、字型、文字大小,以及許多其他視圖特性。下列敘述是否正確?

▢ 是

▢ 否

第 4 題

ScrollView」是一種資料檢視群組,當中可以包含任意數量的資料檢視或檢視區塊做為子群組。下列敘述是否正確?

▢ 是

▢ 否

第 5 題

哪一項 UI 元素可用來在應用程式中顯示圖片?

TextView

ImageView

Button

ScrollView

開始下一門課程:2.2:新增使用者互動功能

如要瞭解本課程中其他程式碼研究室的連結,請參閱 Android Kotlin 基礎程式碼程式碼到達網頁