Chapter 6 進階UI設計.

Slides:



Advertisements
Similar presentations
從 Android SDK 3.0 開始增加了 2 個新的類別: Fragment 與 Action Bar 。 Fragment 提供不同佈局畫面的另一種用法,但 設計更有彈性,更能針對螢幕大小變化,採用 最合適的設計,例如對較大螢幕的平板裝置, 它可以在一個活動的畫面同時顯示 2 個 Fragment.
Advertisements

Android ADT + Android SDK Eclipse Eclipse 編輯器 JAVA JAVA 開發工具.
第2章  Android应用的界面编程.
第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器
實驗五:多媒體播放器選單介面.
Part 2 開發Android應用程式的流程
位置與地圖應用 此投影片為講解Android如何取得定位經緯度和使用Google Map地圖.
Android + Web Service 建國科技大學 資管系 饒瑞佶 2017/3 V1.
ArrayAdapter & Spinner
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
建立Android新專案 建國科技大學 資管系 饒瑞佶 2010/10.
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
Chapter 4 手機控制項應用.
實驗四:單位轉換程式.
Chapter 13 Android 實戰演練.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
實驗十三:顯示目前經緯度位置.
其他視窗.
Ch06 再談選單元件 物件導向系統實務.
使用Android控制Arduino 史先强
Android資料庫處理 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第9章 位置服务与地图应用.
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
第8章 Android内容提供者(ContentProvider)应用
Chapter 6 Advanced UI Design.
Android智慧型手機程式設計實務應用班
Ch5 Android應用程式的主要組成.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
Android介面設計 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
CH10 對話框與分頁.
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
开发Eclipse插件的基本步骤 插件通过添加到预定义的扩展点来向平台添加功能。要将程序代码变成插件,需要: 决定插件如何与平台集成
ANDROID PROGRAMMING2.
CH7 佈局、按鈕與文字編輯元件.
Android + Service 建國科技大學 資管系 饒瑞佶.
Android 基礎.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
Android五大布局 线性布局/相对布局.
新闻客户端项目.
實驗十四:顯示與控制地圖.
第13章 学院介绍 --选项卡切换效果 授课老师:高成珍 QQ号: QQ群: 、
第2讲 移动应用开发基础知识(二) 宋婕
RecyclerView and CardView
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第6章 建立Android使用介面 6-1 介面元件的基礎 6-2 Android的事件處理 6-3 按鈕元件 6-4 文字元件
C/C++/Java 哪些值不是头等程序对象
實驗十一:待辦事項程式 (儲存在手機上).
主编:钟元生 赵圣鲁.
简单工厂模式.
Android Studio介面設計 建國科技大學資管系 饒瑞佶 2016/3 V1.
软件测试 (四)静态测试与动态测试.
ArrayAdapter & Spinner
Chapter 5 Basic UI Design.
Android視窗介面 建國科技大學 資管系 饒瑞佶 2010/10.
主编:钟元生 赵圣鲁.
實驗九:延續實驗八, 製作一個完整音樂播放器
Location Based Services - LBS
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
補間動畫 (Tween Animation) 靜宜大學資管系 楊子青
Android視窗介面 建國科技大學 資管系 饒瑞佶 2010/10.
第二章 Java基本语法 讲师:复凡.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
RecyclerView and CardView
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
Android Speech To Text(STT)
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
加速感測器 靜宜大學資管系 楊子青.
控制UI界面 本讲大纲: 1、使用XML布局文件控制UI界面 2、在代码中控制UI界面 3、使用XML和Java代码混合控制UI界面
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
Presentation transcript:

Chapter 6 進階UI設計

進階UI程式設計 本章節將介紹四種選單,分別為圖式選單、條列式選單、下拉式選單和整合式選單。 選單通常會包含一些常用的指令,用選單方式通常可以讓程式看起來較為簡單,不會讓程式畫面看起來有一堆功能或按鈕

條列式選單 當程式的內容為功能選項、檔案列表等較適合使用條列的方式來呈現時,我們可以使用條列式選單來實做,例如Android的Market應用程式選單,左圖為Market畫面,右圖為範例:

條列式選單 第一種寫法如下 – ListView: public class ListMenuExample extends Activity { // 設定選單要顯示的內容 String[] menuItem = { “選單功能1”, “選單功能2”, “選單功能3” , “選單功能4 ”, “選單功能5 ”}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView myListView = (ListView) findViewById(R.id.ListView01); // 將設定的內容利用Adapter顯示在ListView上 myListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, menuItem)); } 首先要製作一個條例式選單須使用到<ListView>元件,在main.xml當中創建一個id為ListView01的<ListView>;在java程式碼部分,首先先宣告一個ListView元件,並使用findViewById找到id為ListView01的<ListView>,接著用setAdapter將程式的內容文字設定到<ListView>當中

條列式選單 第二種寫法如下 – BaseAdapter和ListActivity: public class ListMenuExample01 extends ListActivity { // 設定選單要顯示的內容 String showData[] = {"選單功能1", "選單功能2", "選單功能3", "選單功能4", "選單功能5"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(new MyListAdapter(this)); } // 將選單內容以列表形式顯示出來 class MyListAdapter extends BaseAdapter{ LayoutInflater myInflater; public MyListAdapter(Context c){ myInflater = LayoutInflater.from(c); public View getView(int position, View convertView, ViewGroup parent) { // 設定部分略 另一種條列式選單,利用BaseAdapter以及ListActivity來達成一樣的效果 在範例中,自訂一個擴展自BaseAdapter 的MyListAdapter類別,並將原類別的Activity換成ListActivity,而在MyListAdapter最重要的Method是複寫getView(),此Method為產生列表的重要關鍵,至於建立的列表數量則會依照getCount()回傳的數量來決定

條列式選單 接著將上述條列式範例加入圖檔: @Override public View getView(int position, View convertView, ViewGroup parent) { final int index = position; ViewContainer vc = new ViewContainer(); if( convertView == null ){ convertView = myInflater.inflate(R.layout.main, null); vc.textView = (TextView) convertView.findViewById(R.id.dataInfo); vc.imageView = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(vc); } else { vc = (ViewContainer) convertView.getTag(); // 設定TextView的文字 vc.textView.setText(showData[index]); // 設定ImageView的圖示 vc.imageView.setImageBitmap(bm); return convertView; 在範例中自訂一個ViewContainer的Class,裡面宣告兩個物件,一為TextView用來置放文字,另一為ImageView,用來放置圖案,若要更進一步客製化顯示的列表,可將要顯示的元件都置放在此Class中,接著再getView時依照此Class來建立列表

條列式選單 範例結果如下:

分頁選單 分頁選單如下圖的Tab選單,存放這些Tab則是使用TabHost,此分頁選單為Android內建選單。

分頁選單 每個Tab對應到一個LinearLayout,XML如下所示: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- 第一個Tab佈局 --> <LinearLayout android:id="@+id/first_tab_layout" androidrientation="vertical" > <!-- 可自訂元件在此 --> <TextView android:text="撥出來電資訊" android:textSize="40sp" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> </LinearLayout>

分頁選單 每個Tab對應到一個LinearLayout,XML如下所示: <!-- 第二個Tab佈局 --> <LinearLayout android:id="@+id/second_tab_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" androidrientation="vertical" > <!-- 可自訂元件在此 --> <TextView android:text="接聽來電資訊" android:textSize="40sp" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> </LinearLayout> <!-- 第三個Tab佈局 --> <LinearLayout android:id="@+id/third_tab_layout" androidrientation="vertical"> <TextView android:text="未接來電資訊" </FrameLayout>

分頁選單 每個對應的LinearLayout中則是可放使用者自訂的元件。在主程式部分則是擴展自TabActivity,程式碼如下: public class TabMenuExample extends TabActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 獲取TabActivity的TabHost TabHost th = getTabHost(); LayoutInflater.from(this).inflate(R.layout.main, th.getTabContentView(), true); // 加入第一個Tab並設定tab的名稱以及圖示並指定第一個佈局 th.addTab(th.newTabSpec("tab1") .setIndicator("撥出來電",getResources().getDrawable(android.R.drawable.sym_call_outgoing)) .setContent(R.id.first_tab_layout) ); // 加入第二個Tab並設定tab的名稱以及圖示並指定第二個佈局 th.addTab(th.newTabSpec("tab2") .setIndicator("接聽來電",getResources().getDrawable(android.R.drawable.sym_call_incoming)) .setContent(R.id.second_tab_layout) ); // 加入第三個Tab並設定tab的名稱以及圖示並指定第三個佈局 th.addTab(th.newTabSpec("tab3"). setIndicator("未接來電",getResources().getDrawable(android.R.drawable.sym_call_missed)) .setContent(R.id.third_tab_layout) ); } 程式一開始使用getTabHost() 得到TabActivity的TabHost,接著從LayoutInflater指定R.layout.main為存放TabHost的資源檔。再來使用TabHost的addTab() 來加入不同的Tab分頁,在範例中加入了三個Tab,每個Tab利用setContent()來指定對應到main.xml當中哪一個LinearLayout

分頁選單 範例結果如圖下:

程式介面設計

程式介面設計 佈景可將整個應用程式依自己建立的風格(style)來做UI設定,而自訂的style可放置在res/values/style.xml內,而定義這些style必須先定義此為<resources>,在<resources>當中建立自訂的<style>,在每個<style>當中可設定各自的<item>元素,程式碼如下: <?xml version="1.0" encoding="utf-8"?> <resources> <!— MyTheme樣式隱藏視窗的Title --> <style name="MyTheme"> <item name="android:windowNoTitle">true</item> </style> <!— MyTextStyle01將文字大小設定為20sp --> <style name="MyTextStyle01"> <item name="android:textSize">20sp</item> <!— MyTextStyle02將文字大小設定為24sp --> <style name="MyTextStyle02"> <item name="android:textSize">24sp</item> </resources>

程式介面設計 從程式碼可看到我們設定了三個<style>,分別為MyTheme、MyTextStyle01和MyTestStyle02,MyTheme中可看到有一個<item>為“android:windowNoTitle”,此屬性若設定為true,可取消程式最上方的程式標題,如下圖:

程式介面設計 除了MyTheme之外,MyTextStyle01和MyTestStyle02這兩個Style分別將文字大小設置為20sp以及24sp,如下圖:

程式介面設計 範例程式碼如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!— 將TextView01的樣式設定為MyTextStyle01 --> <TextView style="@style/MyTextStyle01" android:text="第一種Style" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!— 將TextView02的樣式設定為MyTextStyle02 --> style="@style/MyTextStyle02" android:text="第二種Style" android:id="@+id/TextView02" </LinearLayout></resources>

程式介面設計 若要套用布景到整個應用程式,可修改res/AndroidManifest.xml,如下: 除了可套用至整個應用程式之外,也可以分別對於各個元件單獨設定不同的style,如main.xml,在此定義了兩個<TextView>,並在TextView加入下列屬性: <application … android:theme="@style/MyTheme"> <TextView … style="@style/MyTextStyle01" … >

程式介面設計 下列表列出<style>常用到的<item>元素,更詳細的元素可至/docs/reference/android/R.styleable.html查詢: 屬性 功能敘述 android:windowNoTitle 若設為true,則會隱藏程式上方的標題 android:windowTitleSize 設定應用程式標題大小 android:windowTitleBackgroundStyle 設定標題的背景樣式 android:textColor 文字顏色 android:textSize 文字大小 android:textStyle 文字的樣式:粗體、斜體、粗斜體 android:windowBackground 設置應用程式的背景 android:windowFullscreen 設置應用程式是否為全螢幕 android:layout_width 設置layout的寬度 android:layout_height 設置layout的高度

Q&A