Part 1 學習使用基本介面元件和編排模式 單元11 學習更多介面元件的屬性 單元12 Spinner下拉式選單元件

Slides:



Advertisements
Similar presentations
Android ADT + Android SDK Eclipse Eclipse 編輯器 JAVA JAVA 開發工具.
Advertisements

第二章 Android 简单界面开发 倚动软件工厂实验室 View 组件介绍 布局管理器 自定义组件 目录 CONTENTS.
第一單元 建立java 程式.
第2章  Android应用的界面编程.
實驗五:多媒體播放器選單介面.
Part 2 開發Android應用程式的流程
ArrayAdapter & Spinner
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
建立Android新專案 建國科技大學 資管系 饒瑞佶 2010/10.
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
Chapter 4 手機控制項應用.
實驗四:單位轉換程式.
Chapter 13 Android 實戰演練.
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Ch06 再談選單元件 物件導向系統實務.
9/28號專題報告 Web網頁遊戲 曾建瑋.
JDK 安裝教學 (for Win7) Soochow University
Chapter 6 Advanced UI Design.
Android介面設計 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
Chapter 6 進階UI設計.
CH7 佈局、按鈕與文字編輯元件.
Android + Service 建國科技大學 資管系 饒瑞佶.
Android 基礎.
單元51 在Action Bar上建立Tab標籤頁
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
R教學 安裝RStudio 羅琪老師.
Android五大布局 线性布局/相对布局.
Ch04 使用基本介面元件與編排模式 物件導向系統實務.
實驗十四:顯示與控制地圖.
安裝JDK 安裝Eclipse Eclipse 中文化
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第6章 建立Android使用介面 6-1 介面元件的基礎 6-2 Android的事件處理 6-3 按鈕元件 6-4 文字元件
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
第一單元 建立java 程式.
VS.NET 2003 IDE.
網頁程式設計 本章投影片錄自HTML5、CSS3、RWD、jQuery Mobile跨裝網頁設計 陳惠貞 著 碁峰資訊股份有限公司出版
實驗十一:待辦事項程式 (儲存在手機上).
主编:钟元生 赵圣鲁.
Ch20. 計算器 (Mac 版本).
Android Studio介面設計 建國科技大學資管系 饒瑞佶 2016/3 V1.
HTML – 超連結與圖片 資訊教育.
ArrayAdapter & Spinner
Chapter 5 Basic UI Design.
Android視窗介面 建國科技大學 資管系 饒瑞佶 2010/10.
安裝 / 操作 flashget SOP (以Win 7 作業系統為範例)
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
挑戰C++程式語言 ──第8章 進一步談字元與字串
GridView.
GridView操作 (II).
如何使用Gene Ontology 網址:
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
Android視窗介面 建國科技大學 資管系 饒瑞佶 2010/10.
利用 EditorConfig 自訂文字編輯器設定
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
RecyclerView and CardView
實驗十:影片播放.
Android Speech To Text(STT)
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
多國語系 建國科技大學 資管系 饒瑞佶.
加速感測器 靜宜大學資管系 楊子青.
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
SQLite資料庫 靜宜大學資管系 楊子青.
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
InputStreamReader Console Scanner
Presentation transcript:

Part 1 學習使用基本介面元件和編排模式 單元11 學習更多介面元件的屬性 單元12 Spinner下拉式選單元件 單元13使用RadioGroup和RadioButton元件建立單選清單 單元14 CheckBox多選清單和ScrollView捲軸 單元15 LinearLayout介面編排模式 單元16 TableLayout介面編排模式 單元17 RelativeLayout介面編排模式 單元18 FrameLayout介面編排模式和Tab標籤頁

單元11 學習更多介面元件的屬性

常用的介面元件屬性 屬性名稱 設定值 使用說明 android:id 元件的名稱 設定該介面元件的名稱 android:layout_width android:layout_height fill_parent, match_parent, wrap_content 設定元件的寬和高,fill_parent是舊的屬性值 android:text 元件中的文字 顯示在元件中的文字 android:inputType Text, number, date, time, … 輸入的資料類型 android:background 顏色(6個16進位數字,例如FF0000) 儲存在drawable資料夾中的圖形 設定元件的底色或底圖,顏色以#開頭 android:textSize 數值和sp長度單位 設定文字大小 android:textColor 顏色 設定文字顏色,顏色以#開頭 android:password true, false 用暗碼顯示防止被他人窺視,新版的程式改成用inputType屬性控制 android:autoLink web, email, phone, map, all 自動偵測字串中的超連結資料 android:hint 元件中的提示文字 當EditText元件中沒有輸入任何資料時所顯示的字串 android:layout_margin android:layout_marginXXX 數值和dp長度單位 設定元件四周的間隔距離 android:padding android:paddingXXX 設定元件內部的文字和邊的距離 android:gravity center_hotizontal, center_vertical, center 元件中的物件的對齊方式 android:layout_gravity 元件相對於外框的對齊方式

介面元件屬性使用的長度單位 Android SDK建議如果是設定介面元件的位置、大小、和邊界距離的相關屬性應該使用dp長度單位,如果是設定字體大小的相關屬性,則應該使用sp長度單位。

match_parent和wrap_content的差別 match_parent和fill_parent的效果是一樣的,二者都是填滿元件所在的外框,wrap_content則是依照元件中的文字長度或高度來決定元件的寬或高。 <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="EditText1" /> android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="EditText2"

android:inputType範例 用來限制輸入的字元種類,如果設定成text就能夠輸入任何字元,如果設定成number就只能輸入數字,當設定成date時可以輸入數字和斜線’/’字元,當設定成time時則可以輸入數字和分號’:’字元以及pam等3個英文字母 <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" android:inputType="text" /> android:inputType="number" android:inputType="date" android:inputType="time"

控制文字大小、顏色和底色 <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="預設的文字大小" /> android:text="10sp文字" android:textSize="10sp" android:text="20sp綠色文字" android:textSize="20sp" android:textColor="#00FF00" android:text="30sp綠色文字,黑色底色" android:textSize="30sp" android:background="#000000" 使用android:textSize、android:textColor、android:background來改變文字的大小、顏色,以及元件的底色

控制元件四周的間隔距離以及元件內部的文字和邊的距離 使用margin相關屬性來增加元件和外框之間的距離,以及使用padding相關屬性來增加元件內的文字和元件邊框的距離 <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="預設的間隔" /> android:text="設定padding=20dp" android:padding="20dp" android:text="再設定margin=20dp" android:layout_margin="20dp" android:text="只設定左右margin=30dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp"

單元12 Spinner下拉式選單元件

建立Spinner下拉式選單元件的過程 必須完成下列幾件事: 1. 建立選項清單。選項清單中包含許多項目名稱,這些項目名稱是用陣列的方式表示。 2. 把選項清單設定給一個Spinner介面元件。 3. 設定Spinner元件的清單顯示格式。 4. 設定Spinner元件的OnItemSelectedListener()事件處理程序。當使用者點選某個項目之後,程式必須取得該項目所對應的資料。

建立Spinner下拉式選單元件的二種方式 一種是直接將選項清單以陣列的方式宣告在程式中。這種方式比較簡單,但是如果選項的名稱會隨著不同地區的語言作調整,就不適合使用這種方式,而必須採用第二種方法,就是把選項清單建立在專案的res/values/strings.xml檔案中,再讓程式從專案的資源類別R中取得選項清單陣列。

建立Spinner下拉式選單元件的第一種方式 Step 1. 在專案介面佈局檔res/layout/main.xml中建立一個Spinner介面元件如以下 <Spinner android:id="@+id/spnSex“ android:layout_width="match_parent" android:layout_height="wrap_content" android:drawSelectorOnTop="true“ android:prompt="@string/spnSexPrompt“ android:spinnerMode="dialog" 這個Spinner元件的名稱叫做spnSex,當使用者點選它時就會出現一個名稱叫做spnSexPrompt的提示字串(該字串的值定義在res/values/strings.xml中)。android:spinnerMode屬性則是設定選項清單的顯示方式,dialog的方式是以對話盒的型態出現,另一種dropdown的方式則是將選項清單列於Spinner元件的下方。

建立Spinner下拉式選單元件的第一種方式 Step 2. 取得前一個步驟所建立的Spinner元件 Spinner spnSex = (Spinner)findViewById(R.id.spnSex); Step 3. 把要顯示的選項清單宣告成一個String型態的陣列 String[] sSexList = new String[] {"男", "女"};

建立Spinner下拉式選單元件的第一種方式 Step 4. 建立一個ArrayAdapter類別的物件,將前一個步驟的清單陣列輸入該物件並指定使用Spinner格式。ArrayAdapter是一個泛型類別(generic class),這裡我們指定使用String型態的物件。 ArrayAdapter<String> adapSexList = new ArrayAdapter<String>( this, android.R.layout.simple_spinner_item, sSexList); adapSexList.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); Step 5. 將上一個步驟建立的ArrayAdapter物件設定給前面建立的Spinner元件 spnSex.setAdapter(adapSexList);

建立Spinner下拉式選單元件的第一種方式 Step 6. 建立Spinner的OnItemSelectedListener並完成其中的onItemSelected()和onNothingSelected()二個方法 private Spinner.OnItemSelectedListener spnSexItemSelLis = new Spinner.OnItemSelectedListener () { public void onItemSelected(AdapterView parent, View v, int position, long id) { sSex = parent.getSelectedItem().toString(); } public void onNothingSelected(AdapterView parent) { } }; Step 7.把上一個步驟建立的OnItemSelectedListener物件設定成為Spinner元件的事件處理程序。

Eclipse操作技巧 當要在程式碼中建立一個物件,例如以上範例中的spnSexItemSelLis物件時,先輸入宣告物件的語法,也就是以上範例中的粗體字部分,把裡面的方法先空下來,這時候在這一段程式碼會出現紅色波浪底線標示語法錯誤,將滑鼠游標移到紅色波浪底線上,就會彈出一個說明視窗建議修正方法,點選其中建議的修正項目後,就會自動修正程式碼的錯誤。利用這種方式可以讓程式碼編輯器自動幫我們加入這二個方法,然後再自行輸入裡頭的程式碼。 17

建立Spinner下拉式選單元件的第一種方式

用xml檔案定義自己的選單格式 String[] sSexList = new String[] {"男", "女"}; ArrayAdapter<String> adapSexList = new ArrayAdapter<String>( this, android.R.layout.simple_spinner_item, sSexList); adapSexList.setDropDownViewResource(R.layout.spinner_layout); 以上的程式碼中用底線標示的部分就是使用我們自己專案中的選單格式定義檔res/layout/R.layout.spinner_layout.xml,該檔的內容如下,其中只有一個TextView元件,也就是說每一個選項都會用該TextView元件的格式來顯示。 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" /> 19

建立Spinner下拉式選單元件的第二種方式 把和語言相關的字串定義在程式專案的資源檔中,將來如果要把程式專案移植到其它語言,只要修改專案的資源檔即可,這樣可以有效提高程式的維護效率。為了達到這個目的必須修改第一個方法中的第3和第4步驟。

建立Spinner下拉式選單元件的第二種方式 Step 3.把選項清單陣列以<string-array>標籤的格式宣告在res/values/strings.xml檔案中如下: <?xml version="1.0" encoding="utf-8"?> <resources> <string> …</string> … <string-array name="spnSexList“> <item>男</item> <item>女</item> </string-array> </resources>

建立Spinner下拉式選單元件的第二種方式 Step 4.使用ArrayAdapter類別的createFromResource()方法從專案的資源類別R中取出項目清單陣列,並建立一個ArrayAdapter物件,但是該ArrayAdapter物件的處理型態必須改成CharSequence: ArrayAdapter<CharSequence> adapSexList = ArrayAdapter.createFromResource( this, R.array.spnSexList, android.R.layout.simple_spinner_item); 我們同樣可以使用自行定義的xml檔案來建立自己的選單格式。 這二個方法的執行結果完全一樣。

單元13 使用RadioGroup和RadioButton元件建立單選清單

RadioGroup和RadioButton範例 一組RadioGroup是單選清單由多個RadioButton項目所組成,這組RadioButton元件包含在一個RadioGroup元件中,使用者只能從這些RadioButton項目中點選其中一個。

使用RadioGroup和RadioButton的步驟 Step 1. 在res/layout資料夾下的介面佈局檔中利用RadioGroup標籤和RadioButton標籤建立好選項清單 <RadioGroup android:id=“@+id/radGSex” android:layout_width="fill_parent“ android:layout_height="wrap_content“ android:orientation="vertical” android:checkedButton="@+id/radMale“> <RadioButton android:id="@+id/radMale” android:text="男生” /> <RadioButton android:id="@+id/radFemale” android:text="女生” /> </RadioGroup>

使用RadioGroup和RadioButton的步驟 Step 2. RadioGroup選項清單的操作都會搭配一個Button元件,當按下該Button之後,程式才會讀取使用者點選的項目,只要呼叫RadioGroup元件的getCheckedRadioButtonId()方法就會傳回目前被使用者選取的項目id名稱 int iCheckedRadBtn = radGSex.getCheckedRadioButtonId(); switch (iCheckedRadBtn) { case R.id.radMale: // 選擇這個選項所執行的程式碼 … case R.id.radFemale: // 選擇這個選項所執行的程式碼 … }

「婚姻建議」程式改成使用RadioGroup選單 年齡選項中的文字必須隨著點選的性別而改變。

「婚姻建議」程式改成使用RadioGroup選單 當使用者點選RadioGroup元件中的RadioButton時,Android系統會發出一個OnCheckedChange的事件,所以我們可以在性別RadioGroup元件的OnCheckedChange事件的listener中執行改變年齡選項文字的動作。

「婚姻建議」程式改成使用RadioGroup選單 字串資源檔: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">婚姻建議</string> <string name="promptSex">性別:</string> <string name="promptAge">年齡:</string> <string name="promptBtnDoSug">婚姻建議</string> <string name="sugResult">結果:</string> <string name="sugNotHurry">還不急。</string> <string name="sugGetMarried">趕快結婚!</string> <string name="sugFindCouple">開始找對象。</string> <string name="male">男生</string> <string name="female">女生</string> <string name="maleAgeRng1">小於28歲</string> <string name="maleAgeRng2">28~33歲</string> <string name="maleAgeRng3">大於33歲</string> <string name="femaleAgeRng1">小於25歲</string> <string name="femaleAgeRng2">25~30歲</string> <string name="femaleAgeRng3">大於30歲</string> </resources>

「婚姻建議」程式改成使用RadioGroup選單 介面佈局檔: <?xml version="1.0" encoding="utf-8"?> <LinearLayout … … > <TextView … /> <RadioGroup android:id="@+id/radGSex" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:checkedButton="@+id/radMale"> <RadioButton android:id="@+id/radMale" android:text="@string/male" /> <RadioButton android:id="@+id/radFemale" android:text="@string/female" </RadioGroup> <TextView … /> <RadioGroup android:id="@+id/radGAge" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical” android:checkedButton="@+id/radAgeRng1"> <RadioButton android:id="@+id/radBtnAgeRng1" android:text="@string/maleAgeRng1" /> android:id="@+id/radBtnAgeRng2" android:text="@string/maleAgeRng2" … </RadioGroup> <Button android:id="@+id/btnDoSug”… /> <TextView android:id="@+id/txtResult“…/> </LinearLayout>

「婚姻建議」程式改成使用RadioGroup選單 程式檔: public class Main extends Activity { … public void onCreate(Bundle savedInstanceState) { setupViewComponent(); } private void setupViewComponent() { // 從資源類別R中取得介面元件 // 設定事件listener btnDoSug.setOnClickListener( btnDoSugOnClick); radGSex.setOnCheckedChangeListener( radGSexOnCheChanLis); private RadioGroup. OnCheckedChangeListener radGSexOnCheChanLis = new RadioGroup.OnCheckedChangeListener () { public void onCheckedChanged( RadioGroup group, int checkedId) { … } }; private Button.OnClickListener btnDoSugOnClick = new Button.OnClickListener() { public void onClick(View v) {

「婚姻建議」程式改成使用RadioGroup選單 「婚姻建議」程式從最原始的文字輸入資料方式,修改成使用Spinner下拉式選單的操作介面,現在進一步改成使用RadioButton選單,仔細體會一下程式的操作流程應該可以瞭解使用者介面的改變對程式操作的便利性所帶來的影響。對手機應用程式來說,點選是最方便的操作方式,如果畫面空間允許,應該盡可能把選項全部列出,如此使用者可以一目了然。

單元14 CheckBox多選清單和ScrollView捲軸

CheckBox多選清單 如果程式需要提供使用者可以複選的選項清單,就可以使用CheckBox介面元件。 <LinearLayout … > <CheckBox android:id="@+id/chbItem1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="項目1的名稱" /> <CheckBox android:id="@+id/chbItem2" android:text="項目2的名稱" … <Button … /> </LinearLayout>

CheckBox多選清單 我們必須為每一個CheckBox元件都設定一個id名稱,因為在程式中必須檢查每一個CheckBox元件是否被使用者選取,程式可以利用CheckBox元件的isChecked()方法來檢查每一個CheckBox的選取狀態。 另外在所有CheckBox選項的最後也要加上一個按鈕,當使用者完成選項的勾選之後,可以按下該按鈕。

ScrollView 如果程式包含的選項太多以致超出手機螢幕的範圍,可以在介面佈局檔的<LinearLayout>標籤前面加上<ScrollView>標籤,也就是用<ScrollView>標籤將<LinearLayout>標籤包起來。 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout … </LinearLayout> </ScrollView>

「興趣選擇」範例程式 字串資源檔: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">選擇興趣</string> <string name="music">音樂 </string> <string name="sing">唱歌 </string> <string name="dance">跳舞 </string> <string name="travel">旅行 </string> <string name="reading">閱讀 </string> <string name="writing">寫作 </string> <string name="climbing">爬山 </string> <string name="swim">游泳 </string> <string name="exercise">運動 </string> <string name="fitness">健身 </string> <string name="promptSelOK">確定</string> <string name="hobList">您的興趣:</string> </resources>

「興趣選擇」範例程式 介面佈局檔: <CheckBox android:id="@+id/chbDance" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="30sp" android:text="@string/dance" /> … <Button android:id="@+id/btnSelOK" android:text="@string/promptSelOK" <TextView android:id="@+id/txtHobList" android:text="@string/hobList" </LinearLayout> </ScrollView> 介面佈局檔: <?xml version="1.0" encoding="utf-8"?> <ScrollView … > <LinearLayout … > <CheckBox android:id="@+id/chbMusic" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="30sp" android:text="@string/music" /> <CheckBox android:id="@+id/chbSing" android:text="@string/sing"

「興趣選擇」範例程式 程式碼: private Button.OnClickListener btnSelOKOnClick = new public void onClick(View v) { String s = getString(R.string.hobList); if (chbMusic.isChecked()) s += chbMusic.getText().toString(); if (chbSing.isChecked()) chbSing.getText().toString(); … txtHobList.setText(s); } }; 程式碼: public class HobbySel extends Activity { private CheckBox chbMusic, chbSing, chbDance, … private Button btnSelOK; private TextView txtHobList; public void onCreate(Bundle savedInstanceState) { … setupViewComponent(); } private void setupViewComponent() { // 從資源類別R中取得介面元件