Android筆記(6):字串、顏色及尺寸資源的設定與取用

Photo by Rohit Tandon on Unsplash


Android筆記(3):專案建立與IDE操作介面 一章中瞭解到專案建立時,會一併建立資源(Resource)的目錄,且分成不同目錄存放檔案,如圖片 .jpg檔或音樂檔 .mp3,也可以是佈局 XML 檔,或是設定為字串的參數值等,在 Android Studio 的目錄結構下,res 可存放圖片、目錄及常數 XML檔等,這些資源可在佈局 XML 檔內存取這些資源,也可使用 Java/Kotlin 語言存取。本篇將簡要介紹「字串String.xml」、「顏色 Colors.xml」及「尺寸Dimens.xml」這三個資源檔的建立與取用,

[新增元件ID與取用]

在 XML 內定義元件時,可以給每個元件一個身份識別的名稱,稱做 ID,要如何設定 ID,以及如何在 XML 文檔中取用 ID 呢?以一個例子來說明如何新增 ID ,新增時,使用"@+id/" 在斜線後面放名稱,這個名稱 id_name 可自行命名。如下:
  android:id="@+id/id_name"

取用名稱時,使用"@id/id_name" 來取得資源類型的值,這個 id_name 是先前元件命名的名稱。
  android:id="@id/id_name"

以下範例會在提示字串下方增加兩個按鈕,採用相對佈局(RelativeLayout),因此在元件中需要指定對某個物件的相對位置,這某個物件就要用 ID名稱來識別。Layout的 XML 範例如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="10dp">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="發現新的版本,是否進行更新?" />
        
    <!-- 增加一個按鈕button1 -->
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView1"
        android:layout_alignLeft="@id/textView1" 
        android:text="以後再說" />
        
    <!-- 增加一個按鈕button2,這個按鈕放在 button1 右邊 -->
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView1"
        android:layout_marginLeft="10sp"
        android:layout_toRightOf="@id/button1"
        android:text="立即更新" />
</RelativeLayout>

[字串資源 String.xml]

在Android 中,當需要用到的常數,都可以定義在字串資源檔 String.xml 中,Android Studio 在建立專案時,在 res\values 目錄下,會自動建立一個字串資源檔 strings.xml。開啟這個預設的 String.xml 檔案時,可以看到以下幾行。看到的 AppName 是專案名稱,會隨著專案名稱而不同。
<resources>
    <string name="app_name">AppName</string>
</resources>
在 strings.xml 檔中,根項目是<resources></resources>標記,在該元素中,使用<string> </string>標記定義各字串資源,兩個標記間存放字串的內容。如果要增加一個新的字串及其指定的名稱,可以複製原有的那行,再增加一行即可。另一個方法是使用字串編輯器,在 strings.xml 編輯的上方,有一個「Open editor」的連結。
點選後,開啟一個輸入的視窗,輸入字串的變數名稱和字串文字,再按 OK  即可存入strings.xml。
取用字串資源的方法有兩種,一種是在定義佈局的 xml 檔中,直接引用字串資源的變數名稱,另一種是透過 Java存取,以下就說明這兩種存取的方式:

■ 在佈局 XML 檔中使用字串資源的語法格式如下:
@[<package>:]string/字串名
例如在定義 TextView 元件時,經由字串資源設置 android:text 屬性值的代碼如下:
@[<package>:]string/字串名稱
<textview 
   android:layout_height="wrap_content" 
   android:layout_width="wrap_content" 
   android:text="@string/press"/>
■ 在 Java 檔中使用字串資源的語法格式如下:
[<package>.]R.string.字串名稱
例如在 MainActivity.java 中,可使用以下程式取得名稱為 press 的字串:
getResources().getString(R.string.press) 


[顏色資源 Colors.xml]

顏色資源在程式撰寫開發過程中,也經常被用在設置文字和背景的顏色等,顏色值通過一個透明度(Alpha)和 RGB(紅、綠、藍)色值表示,前面帶一個「#」開頭,這就是顏色的表示法。其中,Alpha 值可以省略,如果省略則表示顏色是完全不透明的。表示方法有以下幾種:
顏色表示法說明
#RGB
#RRGGBB
使用紅、綠、藍三原色的值來表示,其中,紅、綠、藍採用 0~f 或 00~ff 來表示,
例如綠色,可以使用 #0f0 或 #00ff00
#ARGB
#AARRGGBB
使用透明度及紅、綠、藍三原色來表示,其中,透明度、紅、綠和藍均採用 0~f 或 00~ff 來表示,
例如半透明綠色,可以使用 #60f0 或 #6600ff00

瞭解色碼的表示方式後,Android Studio 在專案建立時,在 values 目錄下預設會自動建立一個顏色資源檔 colors.xml,位於res\values 目錄下,開啟 colors.xml 會看到如以下畫面:
每一行<color></color> 標記的左側都會有一個小色塊,如果要改變顏色,可以按一下小色塊(如上圖紅色圈處),就會打開選擇顏色選擇器的對話方塊。在該對話方塊中的色塊區點選,或在三原色處輸入 0~255 的十進位值,即可改變這個變數的顏色。

如要快速挑選顏色,可按紅色圈處的下拉選單,快速選擇不同群的顏色,而上圖的 HEX 顯示的值就是該顏色的色碼值。
取用顏色資源的方法有兩種,一種是在定義佈局的 xml 檔中,直接引用顏色資源的變數名稱,另一種是透過 Java存取,以下就說明這兩種存取的方式:
■ 在 XML 檔中使用顏色資源的語法格式如下:
@[<package>:]color/顏色資源名稱
例如在定義 TextView 元件時,經由顏色資源設置 android:textColor 文字顏色,代碼如下:
<textview 
   android:layout_height="wrap_content" 
   android:layout_width="wrap_content"
   android:text="@string/press"
   android:textColor="@color/title"/>

■ 在 Java 檔中使用顏色資源的語法格式如下:
[<package>.]R.color.顏色資源名稱
例如在 MainActivity.java 中,可使用以下程式設定 TextView 的文字顏色:
TextView tv=(TextView)findViewById(R.id.title);
tv.setTextColor(getResources().getColor(R.color.title));

[尺寸資源 Dimens.xml]

尺寸資源在 Android 應用程式開發過程中也是常用的一種,它通常用於設定文字的大小、元件的間距等。在安裝 Android Studio後,res 目錄內,預設是沒有尺寸資源(dimens resources),如要使用尺寸資源需要手動建立,建立的方法,在「values」資料夾按右鍵 → 「New」→「Resources Value File」,如以下畫面:

出現以下視窗後,在名稱處輸入「dimens」,按下 OK  即可。

在 Android 中,常見的尺寸單位如下表:
尺寸單位說明
dip 或 dp (獨立圖元)基於螢幕密度的抽象單位元。
sp (比例圖元)用於處理字體的大小,可以根據使用者字體大小進行縮放,通常用在設定字體大小。
px (pixels,像素)螢幕上的一個點稱為一個 px。
pt (points,點)螢幕用的物理長度單位,1 point 為 1/72 英寸,一般用在設置字體大小(較不常用)。
in (inches,英寸)英制長度單位。1英寸等於 2.54 公分/釐米,一般用在螢幕對角線長度。
mm (millimeters,公釐/毫米)物理長度單位。

設計過程中,sp 和 dp 很常見,其定義說明如下:
  • dp :在螢幕密度為160dpi(每英寸160 點)的顯示器上,1dp=1px。隨著螢幕密度的改變,dp 與px 的換算也會發生改變。例如,在螢幕密度為320dpi 的顯示器上,1dp=2px。
  • sp :與 dp 類似,該尺寸單位主要用於字體顯示,它可以根據使用者對字體大小的首選項進行縮放。因此,字體大小使用sp 單位可以確保文字按照使用者選擇的大小顯示。

在 dimens.xml 檔中,根項目使用<resources></resources>標記,在該項目中使用<dimen></dimen>標記定義各尺寸資源,兩個標記中間定義一個尺寸常數。如果要增加一個新的尺寸及其指定的名稱,可以複製原有的那行,再增加一行即可。
例如,在dimens.xml 資源檔中添加兩個尺寸資源,其中一個名稱為 title,尺寸值為 24sp; 另一個名稱為 buttonSize,尺寸值為14sp,XML 的描述如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <dimen name="title">24sp</dimen>
  <dimen name="buttonSize">14sp</dimen>
</resources>
取用尺寸資源的方法有兩種,一種是在定義佈局的 xml 檔中,直接引用顏色資源的變數名稱,另一種是透過 Java存取,以下就說明這兩種存取的方式:

■ 在佈局 XML 檔中使用尺寸資源的語法格式如下:
@[<package>:]dimen/尺寸資源名稱
例如在定義 TextView 元件時,經由顏色資源設置 android:textSize 文字大小,代碼如下:
<textview 
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:text="@string/press"
   android:textSize="@dimen/title"/>

■ 在 Java 檔中使用尺寸資源的語法格式如下:
[<package>.]R.dimen.尺寸資源名稱
例如在 MainActivity.java 中,可使用以下程式設定 TextView 的文字尺寸:
TextView tv=(TextView)findViewById(R.id.title);
tv.setTextSize(getResources().getDimension(R.dimen.title));


[參考資料]


Post a Comment

較新的 較舊