天天看點

Android開發入門必知:應用界面組成

螢幕是簡化的視窗,在Android中,常常使用的就是這種簡單的“視窗”。螢幕和螢幕中的内容是Android中UI建構的主要内容。這兩個方面包括:

  螢幕:活動(android.app.Activity);

  螢幕中的内容:視圖(android.view.View)。

  Android中螢幕及其中内容的程式結構如圖2-1所示。

▲圖2-1 Android中螢幕及其中内容的程式結構

  如圖2-1所示,android.app包中的Activity和android.view包中的View分别用于表示一個螢幕和一個視圖的基類。

  Android使用者界面的基本建構方法分成以下幾個步驟:

  繼承預設Activity實作自己的螢幕;

  使用View的繼承者作為螢幕中的内容;

  響應螢幕及其内容中的事件。

  螢幕(活動Activity)

  android.app.Activity類是Android中的活動,是Android四種元件中用來表示UI方面的元件。一個Activity中最主要的内容就是一個視圖(View),此外,這個類還包含了标題欄、菜單、對話框附屬功能。

  活動的生命周期如圖2-2所示。

▲圖2-2 活動的生命周期

  在應用程式中實作自己的活動的時候,通常需要繼承一個Activity類,并主要實作Activity中的以下幾個protected的方法:

  protected void onCreate (Bundle savedInstanceState) // 建立時調用

  protected void onStart () // 開始時調用

  protected void onResume () // 恢複時調用

  protected void onPause () // 停止時調用

  protected void onStop () // 完全停止時調用

  protected void onRestart () // 重新開始時調用

  protected void onDestroy () // 銷毀時調用

  這些以on為開頭的方法用于指定一個活動的狀态機轉換時刻的行為,将在一個活動生命周期中運作的不同階段被調用。

  在一個Activity中,提供了以下一些接口來設定其中的内容:

  public void setContentView(int layoutResID) // 以布局檔案的方式來設定

  public void setContentView(View view) // 以視圖類的方式來設定

  public void setContentView(View view, ViewGroup.LayoutParams params)

  setContentView()用于将一個視圖(View)設定到活動中,通常在所實作Activity的onCreate()階段被調用。

  螢幕中的内容(視圖View)

  android.view.View表示可見的視圖内容,它表現為界面上的可視内容,也可以接收事件。在程式中具體使用的類一般是View的繼承者。各種View的繼承者可以在布局檔案中被描述。

  View的主要辨別是它的id,查找子View的方法。

  public final View findViewById(int id)

  View的事件主要由其中的監聽者(Listener)來獲得,在View類中具有setOn{XXX}Listener()系列方法,内容如下所示:

  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)

  這些方法的參數分别為android.view包中的幾個接口,如表2-1所示。

  表2-1 事件處理接口

  監聽者功能監 聽 類接口中的方法

  單擊OnClickListenervoid onClick(View v)

  長按OnLongClickListenerboolean onLongClick(View v)

  焦點變化OnFocusChangeListenervoid onFocusChange(View v, boolean hasFocus)

  按鍵OnKeyListenerboolean onKey(View v, int keyCode, KeyEvent event)

  觸摸OnTouchListenerboolean onTouch(View v, MotionEvent event)

  上下文菜單OnCreateContextMenuListenervoid onCreateContextMenu(ContextMenu menu, View v,

  ContextMenu.ContextMenuInfo menuInfo)

  這些接口通常需要被使用者程式實作。需要實作的方法中,均以View為第一個參數,當這些方法被調用的時候,傳入的第一個參數通常就是發生事件的View。

  二者的結合

  View及其繼承者通常可以設定到Activity中,作為其中的内容來使用。設定的方法通常是使用Activity的setContentView()方法。

  例如使用如下的方法将一個布局檔案設定到活動當中。

  setContentView(R.layout.mylayout);

  布局檔案可以轉化成View類。這是需要使用的是android.view包中的LayoutInflater類。此時主要使用類中的以下幾個方法:

  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功能就是根據布局檔案的id或者XML檔案,将其轉化為一個View類型的内容。

  在一個活動中進行如下的調用,将布局檔案設定到其中:

  LayoutInflater factory = LayoutInflater.from(this);

  final View mylayout = (View )factory.inflate(R.layout.mylayout, null);

  setContentView(mylayout);

  這種實作方式等價于上述直接将布局檔案設定到Activity中的方式,但是兩個setContentView()的參數不同,前者使用的是整數參數,表示布局檔案的id,後者使用的是一個View類型。所謂XML格式的布局檔案,經過解析之後的結果實際上是一個對多層次組成的View。

  提示:Activity中的setContentView()一般設定布局檔案即可,沒有必要拆成解析和設定兩個步驟。在需要View類型的參數時,LayoutInflater可完成布局檔案到View的轉換。

本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/wws5201985/798104,如需轉載請自行聯系原作者

繼續閱讀