Chapter 6 Advanced UI Design.

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應用程式的流程
XML 第05讲 使用CSS显示XML.
税务认定 永州市国家税务局纳税人学校.
ArrayAdapter & Spinner
2017 IOS系列商务报告通用模版.
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
建立Android新專案 建國科技大學 資管系 饒瑞佶 2010/10.
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
Chapter 4 手機控制項應用.
實驗四:單位轉換程式.
第2章 建立Android應用程式 2-1 Java語言、XML文件與Android 2-2 建立第一個Android應用程式
Chapter 13 Android 實戰演練.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
實驗十三:顯示目前經緯度位置.
Ch06 再談選單元件 物件導向系統實務.
使用Android控制Arduino 史先强
Android資料庫處理 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
Android智慧型手機程式設計實務應用班
Ch5 Android應用程式的主要組成.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
Android介面設計 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
CH10 對話框與分頁.
Chapter 6 進階UI設計.
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
ANDROID PROGRAMMING2.
创建型设计模式.
CH7 佈局、按鈕與文字編輯元件.
Android + Service 建國科技大學 資管系 饒瑞佶.
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 哪些值不是头等程序对象
實驗十一:待辦事項程式 (儲存在手機上).
Chapter 5 Recursion.
主编:钟元生 赵圣鲁.
简单工厂模式.
Android Studio介面設計 建國科技大學資管系 饒瑞佶 2016/3 V1.
Android Application Component
JAVA 编 程 技 术 主编 贾振华 2010年1月.
软件测试 (四)静态测试与动态测试.
Chapter 5 Basic UI Design.
Android視窗介面 建國科技大學 資管系 饒瑞佶 2010/10.
2016 IOS系列商务报告通用模版.
主编:钟元生 赵圣鲁.
實驗九:延續實驗八, 製作一個完整音樂播放器
Location Based Services - LBS
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
補間動畫 (Tween Animation) 靜宜大學資管系 楊子青
Android視窗介面 建國科技大學 資管系 饒瑞佶 2010/10.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
國立清華大學 National Tsing Hua University
RecyclerView and CardView
Android Speech To Text(STT)
怎樣把同一評估 給與在不同班級的學生 How to administer the Same assessment to students from Different classes and groups.
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青
控制UI界面 本讲大纲: 1、使用XML布局文件控制UI界面 2、在代码中控制UI界面 3、使用XML和Java代码混合控制UI界面
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
When using opening and closing presentation slides, use the masterbrand logo at the correct size and in the right position. This slide meets both needs.
Presentation transcript:

Chapter 6 Advanced UI Design

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

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

List Menu First way to write – 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>當中

List Menu Second way to write – BaseAdapter and 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()回傳的數量來決定

List Menu Then add image file to the above-mentioned example of list menu: @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來建立列表

List Menu Results of the example is shown below:

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

Page Menu Every Tab correspond to a LinearLayout. XML is shown below: <?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>

Page Menu Every Tab corresponds to a LinearLayout. XML is shown below: <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>

Page Menu 每個對應的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

Page Menu Results of the example is shown below:

Program Interface Design

Program Interface Design 佈景可將整個應用程式依自己建立的風格(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>

Program Interface Design From the codes we can see we set 3 <style>, they are : MyTheme, MyTextStyle01 and MyTestStyle02. In MyTheme, there is an <item> named “android:windowNoTitle.” If the attribute is set to true, the program title on the top of the program can be cancelled as below:

Program Interface Design Except for MyTheme, font size of the two Style-MyTextStyle01 and MyTestStyle02-are set to 20sp and 24sp, respectively, as shown below:

Program Interface Design Example of codes is shown below: <?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>

Program Interface Design To apply the style to the entire application, it can be achieved by modifying res/AndroidManifest.xml as shown below: In addition to apply the style to the entire application, it can also apply various style to various components, e.g. main.xml. Here we define two <TextView> and insert the following attribute in TextView: <application … android:theme="@style/MyTheme"> <TextView … style="@style/MyTextStyle01" … >

Program Interface Design The most widely applied <item> in <style>. For more detailed <item>, please refer to /docs/reference/android/R.styleable.html: Item Name Description of Function android:windowNoTitle If it is set to true, there will be no title on the top of the program android:windowTitleSize Set title size of the application android:windowTitleBackgroundStyle Set title background style android:textColor Text color android:textSize Font size android:textStyle Text style:bold, italic and bold italic android:windowBackground Set background of the application android:windowFullscreen Set fullscreen of the application android:layout_width Set width of layout android:layout_height Set height of layout

Q&A