- Android經(jīng)典應(yīng)用程序開發(fā)
- 韓超編著
- 385字
- 2019-01-09 15:18:44
第2章UI程序的結(jié)構(gòu)
對(duì)于一個(gè)GUI系統(tǒng)而言,首先是由應(yīng)用程序來控制屏幕中內(nèi)容的外觀和行為。這些內(nèi)容在不同系統(tǒng)的GUI開發(fā)中是不相同的,但是也具有相通性。Android系統(tǒng)在這方面,包含了基本的控件控制和響應(yīng)、設(shè)備事件響應(yīng)、窗口間跳轉(zhuǎn)、對(duì)話框、菜單、標(biāo)題欄、樣式等內(nèi)容,大部分是GUI相通的方面。
2.1 Android中的界面組成
屏幕是簡(jiǎn)化的窗口,在Android中,常常使用的就是這種簡(jiǎn)單的“窗口”。屏幕和屏幕中的內(nèi)容是Android中UI構(gòu)建的主要內(nèi)容。這兩個(gè)方面包括:
屏幕:活動(dòng)(android.app.Activity);
屏幕中的內(nèi)容:視圖(android.view.View)。
Android中屏幕及其中內(nèi)容的程序結(jié)構(gòu)如圖2-1所示。

圖2-1 Android中屏幕及其中內(nèi)容的程序結(jié)構(gòu)
如圖2-1所示,android.app包中的Activity和android.view包中的View分別用于表示一個(gè)屏幕和一個(gè)視圖的基類。
Android用戶界面的基本構(gòu)建方法分成以下幾個(gè)步驟:
繼承默認(rèn)Activity實(shí)現(xiàn)自己的屏幕;
使用View的繼承者作為屏幕中的內(nèi)容;
響應(yīng)屏幕及其內(nèi)容中的事件。
2.1.1 屏幕(活動(dòng)Activity)
android.app.Activity類是Android中的活動(dòng),是Android四種組件中用來表示UI方面的組件。一個(gè)Activity中最主要的內(nèi)容就是一個(gè)視圖(View),此外,這個(gè)類還包含了標(biāo)題欄、菜單、對(duì)話框附屬功能。
活動(dòng)的生命周期如圖2-2所示。

圖2-2 活動(dòng)的生命周期
在應(yīng)用程序中實(shí)現(xiàn)自己的活動(dòng)的時(shí)候,通常需要繼承一個(gè)Activity類,并主要實(shí)現(xiàn)Activity中的以下幾個(gè)protected的方法:
protected void onCreate (Bundle savedInstanceState) // 創(chuàng)建時(shí)調(diào)用 protected void onStart () // 開始時(shí)調(diào)用 protected void onResume () // 恢復(fù)時(shí)調(diào)用 protected void onPause () // 停止時(shí)調(diào)用 protected void onStop () // 完全停止時(shí)調(diào)用 protected void onRestart () // 重新開始時(shí)調(diào)用 protected void onDestroy () // 銷毀時(shí)調(diào)用
這些以on為開頭的方法用于指定一個(gè)活動(dòng)的狀態(tài)機(jī)轉(zhuǎn)換時(shí)刻的行為,將在一個(gè)活動(dòng)生命周期中運(yùn)行的不同階段被調(diào)用。
在一個(gè)Activity中,提供了以下一些接口來設(shè)置其中的內(nèi)容:
public void setContentView(int layoutResID) // 以布局文件的方式來設(shè)置 public void setContentView(View view) // 以視圖類的方式來設(shè)置 public void setContentView(View view, ViewGroup.LayoutParams params)
setContentView()用于將一個(gè)視圖(View)設(shè)置到活動(dòng)中,通常在所實(shí)現(xiàn)Activity的onCreate()階段被調(diào)用。
2.1.2 屏幕中的內(nèi)容(視圖View)
android.view.View表示可見的視圖內(nèi)容,它表現(xiàn)為界面上的可視內(nèi)容,也可以接收事件。在程序中具體使用的類一般是View的繼承者。各種View的繼承者可以在布局文件中被描述。
View的主要標(biāo)識(shí)是它的id,查找子View的方法。
public final View findViewById(int id)
View的事件主要由其中的監(jiān)聽者(Listener)來獲得,在View類中具有setOn{XXX}Listener()系列方法,內(nèi)容如下所示:
public void setOnClickListener(View.OnClickListener l); public void setOnLongClickListener(View.OnLongClickListener l); public void setOnFocusChangeListener(View.OnFocusChangeListener l); public void setOnKeyListener(View.OnKeyListener l); public void setOnTouchListener(View.OnTouchListener l); public void setOnCreateContextMenuListener(View.OnCreateContextMenuListener l)
這些方法的參數(shù)分別為android.view包中的幾個(gè)接口,如表2-1所示。
表2-1 事件處理接口

這些接口通常需要被用戶程序?qū)崿F(xiàn)。需要實(shí)現(xiàn)的方法中,均以Vi e w為第一個(gè)參數(shù),當(dāng)這些方法被調(diào)用的時(shí)候,傳入的第一個(gè)參數(shù)通常就是發(fā)生事件的Vi e w。
2.1.3 二者的結(jié)合
View及其繼承者通常可以設(shè)置到Activity中,作為其中的內(nèi)容來使用。設(shè)置的方法通常是使用Activity的setContentView()方法。
例如使用如下的方法將一個(gè)布局文件設(shè)置到活動(dòng)當(dāng)中。
setContentView(R.layout.mylayout);
布局文件可以轉(zhuǎn)化成View類。這是需要使用的是android.view包中的LayoutInflater類。此時(shí)主要使用類中的以下幾個(gè)方法:
public View inflate (int resource, ViewGroup root) public View inflate (int resource, ViewGroup root, boolean attachToRoot) public View inflate (XmlPullParser parser, ViewGroup root) public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)
LayoutInflater功能就是根據(jù)布局文件的id或者XML文件,將其轉(zhuǎn)化為一個(gè)View類型的內(nèi)容。
在一個(gè)活動(dòng)中進(jìn)行如下的調(diào)用,將布局文件設(shè)置到其中:
LayoutInflater factory = LayoutInflater.from(this); final View mylayout = (View )factory.inflate(R.layout.mylayout, null); setContentView(mylayout);
這種實(shí)現(xiàn)方式等價(jià)于上述直接將布局文件設(shè)置到Activity中的方式,但是兩個(gè)setContentView()的參數(shù)不同,前者使用的是整數(shù)參數(shù),表示布局文件的id,后者使用的是一個(gè)View類型。所謂XML格式的布局文件,經(jīng)過解析之后的結(jié)果實(shí)際上是一個(gè)對(duì)多層次組成的Vi e w。
提示:Activity中的setContentView()一般設(shè)置布局文件即可,沒有必要拆成解析和設(shè)置兩個(gè)步驟。在需要View類型的參數(shù)時(shí),LayoutInflater可完成布局文件到View的轉(zhuǎn)換。
- 通信工程施工工藝手冊(cè)
- Flutter App開發(fā):從入門到實(shí)戰(zhàn)
- 電子線路
- 數(shù)字電路知識(shí)與實(shí)踐課堂
- 中壓電纜全壽命周期典型缺陷圖集
- Premiere Pro CS6影視編輯剪輯制作實(shí)戰(zhàn)從入門到精通(全彩超值版)
- 中文版Premiere Pro CC 2018基礎(chǔ)培訓(xùn)教程(全彩版)
- 5G移動(dòng)通信:無(wú)線網(wǎng)絡(luò)優(yōu)化技術(shù)與實(shí)踐
- 現(xiàn)代交換技術(shù)實(shí)用教程
- 液晶彩電開關(guān)電源速修圖解(第2版)
- 數(shù)字視頻制作實(shí)務(wù)
- .NET 微信公眾平臺(tái)開發(fā)教程
- 衛(wèi)星通信組網(wǎng)控制和管理技術(shù)
- 4G核心網(wǎng)絡(luò)規(guī)劃與設(shè)計(jì)
- 信號(hào)/電源完整性仿真分析與實(shí)踐