標籤:android style blog http color os 使用 java ar
Android的控制項都派生自android.view.View類,在android.widget包中定義了大量的系統控制項供開發人員使用,開發人員也可以從View類及其子類中,派生出自訂的控制項。
一、Android的控制項結構
Android中有一類重要的控制項,稱為容器控制項,它們派生自View的子類android.view.ViewGroup。每個容器控制項都可以作為父控制項存在,其中包含若干個子控制項,每個子控制項佔據其父控制項的一塊地區,統一由父控制項進行管理和支配。
互動介面中控制項的關係直觀上是極其複雜的,所以Android將控制項對象之間的聯絡抽象為樹形結構,從而簡化了控制項之間的關係——每個控制項只會受其父控制項的控制,而不會被其他控制項影響。為了保證保證調控的整體性,Android為控制項樹增加了一個統一的互動事件管理對象ViewParent,它可以從整體上對控制項樹的變化進行調度,避免了控制項對象彼此間的局部通訊,從而大大降低控制項對象間的耦合性。
在Android控制項中,互動事件都是沿著控制項樹自頂向下傳播的。父控制項接受到互動事件後,會先判斷事件的目標控制項對象,如果是自己需要的,就會截獲事件進行處理,否則就嘗試將事件向下分發給對應的子控制項,並遞推地逐級向下傳播事件,直至該事件被處理或者忽略。而在Android中,View定義了一系列事件函數用來接收和處理各類互動事件,比如通過View.onKeyDown函數可以接收到使用者的按鍵動作,onTouchEvent可以擷取使用者觸控螢幕幕的相關事件,等等。每個View類的子控制項都可以重載這些函數,來處理自己所需的事件。
二、Android的控制項屬性
每個Android控制項都有一定的屬性,用於表示控制項對象的基本特徵。這些屬性都定義在View類中。
- 標識
每個控制項對象都可以由一個整數型作為其標識。我們可以通過View.getId函數擷取控制項對象的標識,setId設定標識。或者使用View.findViewById函數從控制項(包括子控制項)尋找到第一個匹配給定標識的控制項對象,其尋找方式採用了樹的深度遍曆。
- 尺寸每個控制項對象都會佔據一定的地區(矩形),該控制項對象會處理與矩形地區相關的互動事件。所以通過長、寬來進行描述控制項的尺寸。精確描述:具體數值,幾像素,幾毫米等;模糊描述:依賴於父控制項或者控制項中內容,來確定自身大小。除此之外,還有位置,距離等資訊。
- 可見度使用View.setVisibility來改變控制項的可見度。三種狀態:可見狀態View.VISIBLE、不可見狀態View.INVISIBLE和消失狀態View.GONE.
不可見狀態時,控制項的位置不會有任何變化;而當控制項處於消失狀態時,它就不再佔據任何介面地區,它的位置會被其他控制項頂替。
- 焦點
焦點指出了當前互動的控制項,並可以將一些資訊(比如說按鍵資訊)傳遞給控制項。焦點切換的計算模式具有很強的靈活性,開發人員也可以通過View.setNextFocusDownId等來設定焦點。
三、Android的視窗機制
所謂視窗機制,是指Android採取了基於視窗註冊的實現模式,將使用者與介面的互動傳遞到對應的控制項中去。使用過c++和java中介面開發可能會比較熟悉。
視窗機制的核心是視窗管理服務(WindowManagerService),它是Android系統的核心服務之一,運行在系統核心進程的一個獨立線程中。它負責管理所以互動介面的控制項樹,並將使用者操作轉換成互動事件傳遞至當前介面。
- 介面組件和視窗
介面組件是Android中最重要的互動單元,每個介面組件都有一個android.view.Window對象。每個Window對象都會負責構造和管理一棵控制項樹,它會為該控制項樹構造對應的ViewRoot對象建立與視窗管理服務的雙向通訊。介面組件的互動介面主要由標題區和內容地區構成。其中,標題的格式比較固定,通常是由標題文字、進度條和元件圖表標等元素構成,開發人員可以通過setTitle方法來改變標題的內容。而內容地區可以通過setContentView函數或者自訂來進行設定。當然,開發人員往往不會滿足於這樣的基本介面架構,所以Android提供了很多介面協助開發人員突破基本的介面樣式。
- 對話方塊
對話方塊也是一個很重要的互動單元,它需要寄宿在某個介面組件中。與介面組件相比,對話方塊的構造更為輕量,生命週期更為簡單,資料轉送也更為快捷。所以常作為臨時的輔助互動對象,將相關資訊提示給使用者。//在介面組件中構造並展現一個對話方塊對象new AlertDialog.Bulider(this) .setTitle("對話方塊標題") //設定標題 .setMessage("對話方塊內容")//設定提示資訊 .setPositiveButton("關閉",new OnClickListener(){ //相關處理}).show();其內容地區用於設定提示資訊,或接受使用者輸入資訊。AlertDialog.Builder對象提供了大量的便捷介面供開發人員使用,比如可以通過AlertDialog.Bulider.setMessage設定提醒的文字資訊,也可以通過AlertDialog.Bulider.setItems函數設定挑選清單亦或可以通過AlertDialog.Bulider.setView自訂內容地區的樣式。
在介面組件中,可以通過Activity.showDialog函數來彈出指定的對話方塊對象,開發人員需要在Activity.onCreateDialog函數中對其進行構造。對話方塊一旦被構造,就會被緩衝下來。開發人員可以通過Activity.dismissDialog函數消隱該對話方塊,可以通過Activity.removeDialog函數刪除緩衝的對話方塊對象。每次對話方塊呈現之前,都會調用Activity.onPrepareDialog函數,開發人員可以通過重載該函數動態地變更對話方塊對象中的內容。
- 快顯視窗
派生自android.widget.Popup.Window的對象。作用也是在介面組件中用於構造臨時互動介面。從使用上來看,PopWindow不像對話方塊那樣從螢幕的固定位置彈出,而是依賴於描點控制項對象的位置。PopWindow的展示盒功能都是以它為核心,作為描點控制項的擴充互動介面,以增強控制項的功能。
如:自動完成文本控制項 android.widget.AutoCompleteTextView是PopWindow的一個應用執行個體。它有一個文本輸入控制項和與之綁定的PopWindow共同構成。
四、Android的基本控制項
控制項是構建介面的基本單元。為了協助更好地進行介面的構造,Android提供了大量的基礎控制項。對於開發人員而言,只有瞭解這些控制項的實現特徵和使用方式,才能夠更快更好地進行互動介面的開發。那麼接下來,我會為大家一個一個介紹Android中比較重要的控制項,並附上簡單的作業碼。
========================================
cpacm
出處:(http://www.cnblogs.com/cpacm/p/3954139.html)
【Android的從零單排開發日記】之入門篇(十三)——Android的控制項解析