《Android程序設(shè)計(jì)教程》課件第四章Android用戶界面程序設(shè)計(jì)_第1頁(yè)
《Android程序設(shè)計(jì)教程》課件第四章Android用戶界面程序設(shè)計(jì)_第2頁(yè)
《Android程序設(shè)計(jì)教程》課件第四章Android用戶界面程序設(shè)計(jì)_第3頁(yè)
《Android程序設(shè)計(jì)教程》課件第四章Android用戶界面程序設(shè)計(jì)_第4頁(yè)
《Android程序設(shè)計(jì)教程》課件第四章Android用戶界面程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第4章Android用戶界面程序設(shè)計(jì)目錄4.1View基礎(chǔ) 4.2界面布局 4.3Widget簡(jiǎn)單組件 4.4Android事件處理 4.5對(duì)話框 4.6Android常用高級(jí)控件4.7Fragment基礎(chǔ) 684.8資源管理 80學(xué)習(xí)目標(biāo)了解Android中的基本UI元素能夠使用布局管理器對(duì)界面進(jìn)行管理掌握界面交互事件處理機(jī)制及實(shí)現(xiàn)步驟能夠熟練使用常用的Widget簡(jiǎn)單控件掌握對(duì)話框的使用掌握Android控件控件的使用能夠使用Android系統(tǒng)的資源管理掌握Fragment控件的使用4.1View基礎(chǔ)4.2界面布局Android中提供了兩種創(chuàng)建布局的方式:(1)在XML布局文件中聲明

(2)在程序中直接實(shí)例化布局及其控件常見(jiàn)的Android布局方式有:線性布局(LinearLayout)相對(duì)布局(RelativeLayout)表格布局(TableLayout)網(wǎng)格布局(GridLayout)絕對(duì)布局(AbsoluteLayout)框架布局(FrameLayout)扁平化布局(ConstraintLayout)4.2.1線性布局LinearLayout是一種線性排列的布局,布局中的控件按照水平(horizontal)或垂直(vertical)兩種方向排列。4.2.2相對(duì)布局RelativeLayout是一組相對(duì)排列的布局方式,在相對(duì)布局容器中子控件的位置總是相對(duì)于兄弟控件或父容器4.2.3表格布局TableLayout類似于表格形式,以行和列的方式來(lái)布局子控件。

在TableLayout布局中,可以通過(guò)以下三種方式對(duì)單元格進(jìn)行設(shè)置。(1)Shrinkable:如果某個(gè)列被設(shè)置為Shrinkable,那么該列中所有單元格的寬度都可以被收縮,以保證表格能適應(yīng)父容器的寬度。(2)Stretchable:如果某個(gè)列被設(shè)置為Stretchable,那么該列中所有單元格的寬度都可以被拉伸,以保證控件能夠完全填滿表格的空余空間。(3)Collapsed:如果某個(gè)列被設(shè)置為Collapsed,那么該列中所有單元格都會(huì)被隱藏。4.2.4絕對(duì)布局絕對(duì)布局是通過(guò)指定x、y坐標(biāo)來(lái)控制每一個(gè)控件的位置,放入該布局的控件需要通過(guò)android:layout_x和android:layout_y兩個(gè)屬性指定其在屏幕上確切的位置。把屏幕看作一個(gè)坐標(biāo)軸,左上角為(0,0),往屏幕下方為y正半軸,右方為x正半軸。4.2.5框架布局框架布局(FrameLayout)又稱幀布局,是Android布局中最簡(jiǎn)單的一種,框架布局為每個(gè)加入其中的控件創(chuàng)建了一塊空白區(qū)域。采用框架布局的方式設(shè)計(jì)界面時(shí),只能在屏幕左上角顯示一個(gè)控件,如果添加多個(gè)控件,這些會(huì)依次重疊在屏幕左上角顯示,且會(huì)透明顯示之前的文本。4.2.6網(wǎng)格布局網(wǎng)格布局(GridLayout),是Android4.0新增的布局管理器,因此需要在4.0之后的版本才能使用。它的作用類似于table(表格),它把整個(gè)容器劃分為rows×columns個(gè)網(wǎng)格,每個(gè)網(wǎng)格可以放置一個(gè)組件。GridLayout提供了setRowCount(int)和setColumnCount(int)方法來(lái)控制該網(wǎng)格的行數(shù)量和列數(shù)量。4.3Widget簡(jiǎn)單組件4.3.1文本控件文本控件主要包括TextView控件和EditText控件。其中TextView控件繼承自View類,其主要功能是向用戶顯示文本內(nèi)容,同時(shí)可選擇性地讓用戶編輯文本。從功能上來(lái)說(shuō),一個(gè)TextView就是一個(gè)完整的文本編輯器,只不過(guò)其本身被設(shè)置為不允許編輯,其子類EditText被設(shè)置為允許用戶對(duì)內(nèi)容進(jìn)行編輯。4.3.2Button和開(kāi)關(guān)控件Button是常用的普通按鈕控件,用戶能夠在該控件上點(diǎn)擊,引發(fā)相應(yīng)的響應(yīng)事件。ToggleButton和Switch都是選擇類型的按鈕,具有選中和未選中兩種狀態(tài)。4.3.3ImageButton和ImageView控件ImageView繼承自View組件,它的主要功能是用于顯示圖片,除此之外,ImageView還派生了ImageButton、ZoomButton等組件,因此ImageView支持的XML屬性、方法,基本上也可以應(yīng)用于ImageButton,ZoomButton等組件。4.3.4RadioButton和RadioGroup控件

RadioGroup是單選按鈕組,是一個(gè)允許容納多個(gè)RadioButton的容器。在沒(méi)有RadioGroup的情況下,RadioButton可以分別被選中;當(dāng)多個(gè)RadioButton同一個(gè)RadioGroup按鈕組中,RadioButton只允許選擇其中之一。RadioButton和RadioGroup的關(guān)系如下:(1)RadioButton表示單個(gè)圓形單選框,RadioGroup是一個(gè)可以容納多個(gè)RadioButton的容器。(2)同一個(gè)RadioGroup中,只能有一個(gè)RadioButton被選中;不同的RadioGroup中,RadioButton互不影響。(3)通常情況下,一個(gè)RadioGroup中至少有2個(gè)RadioButton。一般一個(gè)RadioGroup組中,會(huì)默認(rèn)有一個(gè)RadioButton被選中,并將其放置在RadioGroup的起始位置。4.3.5CheckBox復(fù)選框CheckBox復(fù)選框是一種具有雙狀態(tài)的按鈕,具有選中或者未選中兩種狀態(tài)。CheckBox和RadioButton的主要區(qū)別如下:(1)RadioButton單選按鈕被選中后,再次單擊時(shí)無(wú)法改變其狀態(tài);而CheckBox復(fù)選框被選中后,可以通過(guò)單擊來(lái)改變其狀態(tài)。(2)在RadioButton單選按鈕組中,只允許選中一個(gè);而在CheckBox復(fù)選框組中,允許同時(shí)選中多個(gè)。(3)大部分UI框架中默認(rèn)RadioButton以圓形表示,CheckBox都以正方形表示。4.4Android事件處理Android提供了兩種方式的事件處理:基于回調(diào)的事件處理和基于監(jiān)聽(tīng)的事件處理。

對(duì)于基于監(jiān)聽(tīng)器的事件處理主要是為Android界面組件綁定特定的事件監(jiān)聽(tīng)器;

對(duì)于基于回調(diào)的事件處理,主要是重寫(xiě)Android構(gòu)件特定的回調(diào)函數(shù),Android大部分界面組件都提供了事件響應(yīng)的回調(diào)函數(shù),只需要重寫(xiě)就可以。4.4.1基于監(jiān)聽(tīng)的事件處理Android系統(tǒng)中引用了Java事件處理機(jī)制,包括事件、事件源和事件監(jiān)聽(tīng)器三個(gè)事件模型,與基于回調(diào)的事件處理相比,更具有“面向?qū)ο蟆毙再|(zhì)的事件處理方式。事件(Event):這是一個(gè)描述事件源狀態(tài)改變的對(duì)象,事件對(duì)象不是通過(guò)new運(yùn)算符創(chuàng)建的,而是在用戶觸發(fā)事件時(shí)由系統(tǒng)生成的對(duì)象。事件包括鍵盤(pán)事件、觸摸事件等,一般作為事件處理方法的參數(shù),以便從中獲取事件的相關(guān)信息。?事件源(EventSource):產(chǎn)生事件的來(lái)源,通常是各種組件,如按鈕等。事件監(jiān)聽(tīng)器(EventListener):負(fù)責(zé)監(jiān)聽(tīng)事件源發(fā)生的事件,并對(duì)不同的事件做相應(yīng)的處理。在程序中實(shí)現(xiàn)事件監(jiān)聽(tīng)器,通常有以下四種形式:(1)Activity本身作為事件監(jiān)聽(tīng)器:通過(guò)Activity實(shí)現(xiàn)監(jiān)聽(tīng)器接口,并實(shí)現(xiàn)事件處理方法。(2)匿名內(nèi)部類形式:使用匿名內(nèi)部類創(chuàng)建事件監(jiān)聽(tīng)器對(duì)象。(3)內(nèi)部類或外部類形式:將事件監(jiān)聽(tīng)類定義為當(dāng)前類的內(nèi)部類或普通的外部類。(4)綁定標(biāo)簽:在布局文件中為指定標(biāo)簽綁定事件處理方法。通常實(shí)現(xiàn)基于監(jiān)聽(tīng)的事件處理步驟如下:(1)創(chuàng)建事件監(jiān)聽(tīng)器。(2)在事件處理方法中編寫(xiě)事件處理代碼。(3)在相應(yīng)的組件上注冊(cè)監(jiān)聽(tīng)器。4.4.2基于回調(diào)機(jī)制的事件處理基于回調(diào)機(jī)制的事件主要有onKeyDown()方法、onKeyUp()方法、onTouchEvent()方法、onTrackBallEvent()方法、onFocusChanged()方法。onKeyDown()方法是接口KeyEvent.Callback中的抽象方法,所有的View全部實(shí)現(xiàn)了該接口并重寫(xiě)了該方法,該方法用來(lái)捕捉手機(jī)鍵盤(pán)被按下的事件。方法的聲明格式如下所示:publicbooleanonKeyDown(intkeyCode,KeyEventevent)onKeyUp()同樣是接口KeyEvent.Callback中的一個(gè)抽象方法,并且所有的View同樣全部實(shí)現(xiàn)了該接口并重寫(xiě)了該方法,onKeyUp()方法用來(lái)捕捉手機(jī)鍵盤(pán)按鍵抬起的事件,方法的聲明格式如下所示:

publicbooleanonKeyUp(intkeyCode,KeyEventevent)onTouchEvent()方法是手機(jī)屏幕事件的處理方法。該方法在View類中定義,并且所有的View子類全部重寫(xiě)了該方法,應(yīng)用程序可以通過(guò)該方法處理手機(jī)屏幕的觸摸事件。該方法的聲明格式如下所示:publicbooleanonTouchEvent(MotionEventevent)onTrackBallEvent是手機(jī)中軌跡球的處理方法。所有的View同樣全部實(shí)現(xiàn)了該方法。該方法的聲明格式如下:

publicbooleanonTrackballEvent(MotionEventevent)onFocusChanged()方法只能在View中重寫(xiě),該方法是焦點(diǎn)改變的回調(diào)方法,當(dāng)某個(gè)控件重寫(xiě)了該方法后,當(dāng)焦點(diǎn)發(fā)生變化時(shí),會(huì)自動(dòng)調(diào)用該方法來(lái)處理焦點(diǎn)改變的事件。該方法的聲明格式如下。protectedvoidonFocusChanged(booleangainFocus,intdirection,RectpreviouslyFocusedRect)4.5對(duì)話框1、提示對(duì)話框AlertDialogAlertDialog對(duì)話框可以包含若干按鈕(0~4個(gè)不等)和一些可選的選項(xiàng),一般包括普通對(duì)話框、列表對(duì)話框、單選按鈕和復(fù)選框?qū)υ捒?。一般?lái)說(shuō),AlertDialog的功能能夠滿足常見(jiàn)的對(duì)話框用戶界面的需求。2、進(jìn)度對(duì)話框ProgressDialogProgressDialog可以顯示進(jìn)度輪(wheel)和進(jìn)度條(bar),由于ProgressDialog繼承自AlertDialog,所以在進(jìn)度對(duì)話框中也可以添加按鈕。3、日期選擇對(duì)話框DatePickerDialogDatePickerDialog對(duì)話框可以顯示并允許用戶選擇日期。

4、時(shí)間選擇對(duì)話框TimePickerDialogTimePickerDialog對(duì)話框可以顯示并允許用戶選擇時(shí)間。普通對(duì)話框中只顯示提示信息、“確定”按鈕和一個(gè)“取消”按鈕,通過(guò)AlertDialog來(lái)實(shí)現(xiàn)。實(shí)現(xiàn)日期選擇對(duì)話框和時(shí)間選擇對(duì)話框的開(kāi)發(fā)分別需要使用DatePickerDialog類和TimePickerDialog類。4.6Android常用高級(jí)控件4.6.1AutoCompleteTextView控件所謂“自動(dòng)完成”就是在文本框中輸入文字信息時(shí),會(huì)顯示與之相似的關(guān)鍵字讓你來(lái)選擇。AutoCompleteTextView類繼承自EditView類,位于android.widget包下。自動(dòng)完成文本框控件的外觀與圖片文本框幾乎相同,只是當(dāng)用戶輸入某些文字信息時(shí),會(huì)自動(dòng)出現(xiàn)下拉菜單顯示與用戶輸入文字相關(guān)的信息,用戶直接點(diǎn)擊需要的文字便可自動(dòng)填寫(xiě)到文本控件中。4.6.2ScrollView控件滾動(dòng)視圖控件ScrollView類繼承自FrameLayout類,因此,實(shí)際上它是一個(gè)幀布局,同樣位于android.widget包下。ScrollView控件是當(dāng)需要顯示的信息在一個(gè)屏幕內(nèi)顯示不下時(shí),在屏幕上會(huì)自動(dòng)生成一個(gè)滾動(dòng)條,以達(dá)到用戶可以對(duì)其進(jìn)行滾動(dòng),顯示更多信息的目的。4.6.3Listview控件Listview類位于android.widget包下,是一種列表視圖控件,將ListAdapter所提供的各個(gè)控件顯示在一個(gè)垂直且可滾動(dòng)的列表中。該類的使用方法非常簡(jiǎn)單,只需先初始化所需要的數(shù)據(jù),然后創(chuàng)建適配器并將其設(shè)置給ListView,ListView便將信息以列表的形式顯示到頁(yè)面中。BaseAdapter是最基礎(chǔ)的Adapter類,該類實(shí)現(xiàn)了ListAdapter接口,是最實(shí)用最常用的一個(gè)類。學(xué)會(huì)BaseAdapter需要掌握getCount()、getItem()、getItemId()和getView()四個(gè)方法。getCount():要綁定的條目的數(shù)目,比如格子的數(shù)量getItem():根據(jù)一個(gè)索引(位置)獲得該位置的對(duì)象getItemId():獲取條目的idgetView():獲取該條目要顯示的界面4.6.4ProgressBar與SeekBar控件滑塊類似于聲音控制條,主要完成與用戶的簡(jiǎn)單交互,而進(jìn)度條則是需要長(zhǎng)時(shí)間加載某些資源時(shí)用戶顯示加載進(jìn)度的控件。ProgressBar類同樣位于android.widget包下,但其繼承自View,主要用于顯示一些操作的進(jìn)度。應(yīng)用程序可以修改其長(zhǎng)度表示當(dāng)前后臺(tái)操作的完成情況。SeekBar繼承自ProgressBar,是用來(lái)接收用戶輸入的控件。SeekBar類似于拖動(dòng)條,可以直觀地顯示用戶需要的數(shù)據(jù),常用于聲音調(diào)節(jié)等場(chǎng)合。RatingBar是另一種滑塊控件,一般用于星級(jí)評(píng)分的場(chǎng)合,其位于android.widget包下,外觀是5個(gè)星星,可以通過(guò)拖動(dòng)來(lái)改變進(jìn)度,除圖片形式外,還有較小的以及較大的兩種表現(xiàn)形式。4.6.5Gallery控件畫(huà)廊控件(Gallery)是Android中一種較為常見(jiàn)的高級(jí)控件,其效果酷炫且使用方式簡(jiǎn)單,是設(shè)計(jì)相冊(cè)或者圖片選擇器的首選控件。Gallery組件可以橫向顯示一個(gè)圖像列表,當(dāng)單擊當(dāng)前圖像的后一個(gè)圖像時(shí),這個(gè)圖像列表會(huì)向左移動(dòng)一格,當(dāng)單擊當(dāng)前圖像的前一個(gè)圖像時(shí),這個(gè)圖像列表會(huì)向右移動(dòng)一樣,也可以通過(guò)拖動(dòng)的方式來(lái)向左和向右移動(dòng)圖像列表。4.6.6Toast控件Toast向用戶提供比較快速的即時(shí)消息,當(dāng)Toast被顯示時(shí),雖然其懸浮于應(yīng)用程序的最上方,但是Toast從不獲取焦點(diǎn)。Toast對(duì)象的創(chuàng)建是通過(guò)Toast類的靜態(tài)方法makeText()來(lái)實(shí)現(xiàn)的,該方法有兩個(gè)重載實(shí)現(xiàn),主要的不同是一個(gè)接收字符串,而另一個(gè)接收字符串的資源標(biāo)識(shí)符作為參數(shù)。4.6.7Notification控件Notification是另外一種消息提示的方式,位于手機(jī)的狀態(tài)欄(StatusBar)。狀態(tài)欄位于手機(jī)屏幕的最上層,通常顯示電池電量、信號(hào)強(qiáng)度等信息,在Android手機(jī)中,用手指按住狀態(tài)欄并往下拉可以打開(kāi)狀態(tài)欄查看系統(tǒng)的提示消息。4.6.8Spinner控件下拉列表控件(Spinner)是最常用的高級(jí)控件之一,一般用來(lái)從多個(gè)選項(xiàng)中選擇一個(gè)需要的,例如出生日期的選擇、居住城市的選擇等。Spinner控件位于android.widget包下,是View類的一個(gè)子類。每次只顯示用戶選中的元素,當(dāng)用戶再次點(diǎn)擊時(shí),會(huì)出現(xiàn)選擇列表供用戶選擇,而選擇列表中的元素同樣來(lái)自適配器。需要注意的是,Android中的下拉列表并不象其他系統(tǒng)中直接下拉顯示選項(xiàng),而是相當(dāng)于彈出菜單供用戶選擇。4.6.9TabHost控件選項(xiàng)卡(TabHost)類位于android.widget包下,是選項(xiàng)卡的封裝類,用于創(chuàng)建選項(xiàng)卡窗口。TabHost類繼承自FrameLayout,是幀布局的一種,其中可以包含多個(gè)布局,用戶可以根據(jù)自己的選擇顯示不同的界面。4.6.10GridView網(wǎng)格控件GridView(網(wǎng)格視圖控件)用于在界面上按行、列分布的方法顯示多個(gè)組件。GridView與ListView有相同的父類,因此它們具有相似的特性。它們的主要區(qū)別在于:ListView是在一個(gè)方向上分布,而GridView是在兩個(gè)方向上分布。4.7Fragment基礎(chǔ)Fragment翻譯為中文就是“碎片”的意思,它是一種嵌入到Activity中使用的UI片段。一個(gè)Activity中可以包含一個(gè)或多個(gè)Fragment,而且一個(gè)Activity可以同時(shí)展示多個(gè)Fragment。4.7.2Fragment生命周期Fragment的生命周期與Activity的生命周期類似,也具有以下幾個(gè)狀態(tài):活動(dòng)狀態(tài)——當(dāng)前Fragment位于前臺(tái)時(shí),用戶可見(jiàn)并且可以獲取焦點(diǎn)。暫停狀態(tài)——其他Activity位于前臺(tái),該Fragment仍然可見(jiàn)或部分可見(jiàn),但不能獲取焦點(diǎn)。停止?fàn)顟B(tài)——該Fragment不可見(jiàn),失去焦點(diǎn)。銷毀狀態(tài)——該Fragment被完全刪除或該Fragment所在的Activity結(jié)束。4.7.3Fragment的創(chuàng)建Fragment的創(chuàng)建與Activity的創(chuàng)建類似,要?jiǎng)?chuàng)建一個(gè)Fragment必須要?jiǎng)?chuàng)建一個(gè)類繼承自Fragment。Android系統(tǒng)提供了兩個(gè)Fragment類,分別是android.app.Fragment和android.support.v4.app.Fragment。動(dòng)態(tài)添加碎片主要分為如下5個(gè)步驟:(1)創(chuàng)建待添加的碎片實(shí)例。(2)獲取到FragmentManager,在活動(dòng)中可以直接調(diào)用getFragmentManager()方法得到。(3)開(kāi)啟一個(gè)事務(wù),通過(guò)調(diào)用beginTransaction()方法開(kāi)啟。(4)向容器內(nèi)加入碎片,一般使用replace()方法實(shí)現(xiàn),需要傳入容器的id和待添加的碎片實(shí)例。(5)提交事務(wù),調(diào)用commit()方法來(lái)完成。4.7.4Fragment與Activity之間的通信1.在Activity中獲取Fragment實(shí)例為了實(shí)現(xiàn)Fragment和Activity之間的通信,F(xiàn)ragmentManager提供了一個(gè)findFragmentById()的方法,專門(mén)用于從布局文件中獲取Fragment實(shí)例的。該方法有一個(gè)參數(shù),它代表Fragment在Activty布局中的id。例如在布局文件中指定SecondFragment的id為R.id.second_fragmnet,這時(shí)就可以使用getFragmentManager().findRagmentById(R.id.second_fragmnet)方法得到SecondFragment的實(shí)例2.在Fragment中獲取Activity實(shí)例在Fragment中獲取Activity實(shí)例對(duì)象,可以通過(guò)在Fragment中調(diào)用getActivity()方法來(lái)獲取到與當(dāng)前Fragment相關(guān)聯(lián)的Activity實(shí)例對(duì)象。例如在MainActivity中添加了SecondFragment,那么就可以通過(guò)在Fragment中調(diào)用getActivity()來(lái)獲取MainActivity實(shí)例對(duì)象。4.8資源管理所謂資源就是在代碼中使用的外部文件,包括圖片、音頻、動(dòng)畫(huà)和字符串等。在傳統(tǒng)的程序開(kāi)發(fā)過(guò)程中,需要用到很多常量、字符串等資源。在Android應(yīng)用程序中,除了res目錄外,assets目錄也用于存放資源,這兩個(gè)目錄的區(qū)別是:通常在

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論