[Android Studio #2] 操作資源XML檔
利用Android Studio產生出第一個程式後,點擊Project按鈕觀察專案的目錄結構,再研究資源檔的使用方法,同時在第一個程式畫面裡增加另一個文字元件。
Android Studio的專案目錄結構
外部資源設定
為了讓Android應用程式比較簡單的達到多語系與容易維護的目標,應用程式裡使用到的各式字串都是以外部參考的方法定義在values資料夾內的xml檔裡。
例如預設程式的應用程式設定檔AndroidManifest.xml也使用了外部參考,以下以 @ 開頭的字串就是外部參考,實際的值分別存放在res\values\strings.xml與styles.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="tw.jdev.myapplication" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="16" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="tw.jdev.myapplication.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
使用者介面設定檔activity_main.xml也使用到了dimens.xml與strings.xml:
<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" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
在Android Studio編輯區的@string/hello_world
裡按〔Ctrl〕+〔左鈕〕會自動將參考資源設定開啟在新分頁裡,這樣可以省卻在目錄裡尋找檔案的時間。@string/hello_world
是定義在strings.xml(@string/hello_world對應到strings.xml的hello_world項目)裡:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">My Application</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> </resources>
我們試著變更strings.xml的值來看看會發生什麼變化:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">我的第一個Android應用程式</string> <string name="action_settings">設定</string> <string name="hello_world">大家好!</string> </resources>
如果你有開啟右側的Preview視窗的話,馬上就能看到程式標題和內文都變成中文了。
UI設計器操作
把編輯區切換到設計畫面,點選Palette(調色盤)裡的Plain TextView小工具,當游標學多進手機空白處時會出現虛線框,表示要放置元件的元件,放置時會自動對齊靠近的其他元件(綠色箭頭表示對齊),移動到想要放置的位置後按一下左鈕,該位置會顯示New Text元件。
▼剛放好的元件或再點選元件一次,其四周會出現藍色小方塊讓我們拖拉元件的大小。另外,在Android Studio的編輯區或設計器裡若看到燈泡圖示的話,表示此處有系統提示可以查看,另一個查看提示的方法是按〔Alt〕+〔Enter〕。這裡的提示是告訴我們最好用外部資源檔來存文字。
▼雙擊元件後會彈出字串設定對話窗,輸入好文字後按〔Enter〕,如此輸入的文字會直接被儲存到activity_main.xml裡,如果要使用外部資源的方式的話必須按輸入欄位後方的〔...〕,再於Resources對話窗點擊左下角的【New Resource】→【New String Value...】。
▼接著在New String Value Recource對話窗輸入需要的資源名稱、字串值與存放的XML檔名後按〔OK〕。
▼以上步驟新增一個TextView元件到畫面裡,但在設計器或Preview視窗卻無法正確的看到新加的文字,而是出現錯誤訊息「Rendering Problem Coludn't resolve resource @string/text2」;這是目前版本的Bug,重新啟動Android Studio才會正常 2013/10/04更新0.2.0.11版本後此問題不再發生:
drawable圖檔資源
外部資源裡比較特別的是圖檔目錄,在AndroidManifest.xml裡設定應用程式圖示的寫法是android:icon="@drawable/ic_launcher"
,對應到 res/資料夾卻找不到drawable或drawables資料夾,反而是 drawable-hdpi、drawable-mdpi、drawable-xhdpi與drawable-xxhdpi,減號後的hdpi、mdpi、xhdpi、xxhdpi是不同的解析度,分別對應為 high-DPI(Dots per inch,每吋畫素點數)、medium-DPI、extra high-DPI與extra extra high-DPI(解析度參考:http://developer.android.com/guide/practices/screens_support.html#range),在每個drawable資料夾裡都有個不同大小的ic_launcher.png圖檔,用來在不同解析度的設備顯示不同的圖片(ic是icon之意)。
AndroidManifest.xml的android:icon設定要注意的是只設圖檔的主檔名而不寫副檔名,系統自動會依設備解析度使用對應主檔名的.png、.jpg或.gif檔。
dimens維度資源
維度(Dimensions)也是經常使用的XML設定資源,例如在activity_main.xml裡就有android:paddingLeft="@dimen/activity_horizontal_margin"
設定,其值定義在res/values/dimens.xml裡:
<resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> </resources>
維度可使用下列六種單位來指定(參考:http://developer.android.com/guide/topics/resources/more-resources.html#Dimension與Android dpi / px / dp / 研究):
- dp(或dip):Density-independent Pixels,density意同DPI,基於硬體計算出的抽象尺寸單元,會依不同的解析度自動換算
- sp:Scale-independent Pixels,與dp相同但會參考使用的字型大小換算
- pt:點數,硬體螢幕大小的1/72英吋
- px:Pixels,畫素
- mm:公釐
- in:英吋
##
您可能也會有興趣的類似文章
- [Android Studio #3] 使用Android Asset Studio產生圖示檔與@+id與@id之差異 (0則留言, 2013/10/07)
- Android Studio的安裝、設定與執行 (4則留言, 2013/10/03)
- 開發Android應用程式時操作SQLite資料庫的方法 (0則留言, 2019/03/30)
- [IntelliJ IDEA] 如何總公司決匯入舊版Android應用時的Cannot resolve symbol R問題 (0則留言, 2019/02/14)
- 用Android Studio增加多語系資源目錄 (2則留言, 2013/11/22)
- Android Studio無法在Ubuntu 64位元環境執行的解決方法 (0則留言, 2013/11/03)
- Genymotion Emulator:x86架構最快速的Android模擬器,加快Android程式開發 (2則留言, 2013/11/16)
- Android Studio添加外部程式庫的步驟 (0則留言, 2013/11/19)
- [Android Studio #8] 自動產生onClick事件程式碼 (0則留言, 2015/03/22)
- [Android Studio #9] 無法執行x86模擬器的處理步驟 (2則留言, 2015/04/20)
- [Windows] IntelliJ IDEA啟動緩慢的解決方法(適用JetBrains各個工具,包含Android Studio) (0則留言, 2019/07/14)
- Android手機雲端備份實戰 (0則留言, 2014/01/29)
- 便利的Android程式啟動器:FAppSter,功能類似Launchy的隨打即找 (0則留言, 2013/08/06)
- Nexus 7最推薦10大工作用Apps 十之十:美化介面-天氣小工具 Beautiful/HD/Fancy Widgets (0則留言, 2012/12/17)
- Android設備閱讀純文字電子書的小技巧 (4則留言, 2012/11/18)
Sorry, 很久沒用Google sc…