前言
到現在為止我們已經學習了三個android程序: Hello, Call,Sms 的。對於android的程序有了基本的感性的認識。今天開始回顧和講解Activity,目的就是消除前幾次課程的疑問的地方?
主要內容如下:
(1)界面構造Activity只是一個UI的容器,對於Android來說,Android的UI框架最核心的,是資源和Layout體系,android提供了大量的的UI控件,是的我們可以構建自己的用戶界面!
UI控件
做UI,有時候就像搭積木,在android中,這個最原子的積木塊,就是VIEw。所有其他的UI元素,都是派生於此類的子孫類們。
SDK中圖,用來描述android的UI控件結構
在每一個window(Activity下的一個抽象類)下,這都是一個標准而完整的View樹結構。View有一個子類ViewGroup,它相當於一個容器類或者是復合控件,所有派生與ViewGroup的子類在這顆UI樹中都可以承擔著父節點的職責,而另一些繞過ViewGroup從VIEw直通下來的,就只能蜷局在葉節點的范疇內了。
每個控件如何標識,如何設定大小和位置,其如何接受和處理事件,如何在程序中得到控件?
標識
在android中,我們可以為每個控件選擇設定一個id,這個id的全局的唯一性不需要保證,但在某個局部的范圍內(就是在一個Layout內唯一就可以了)具有可識別性,這樣就可以通過這個id找到這個控件。
尺寸,大小和位置
在android中,控件最重要的大小屬性,就是width/height,開發者可以明確的指明控件的大小,可以設定成為fill_parent和wrap_content,
事件
Android的事件處理邏輯,采用的是觀察者模式。android的控件提供了一些列的add/set Listener的接口,使得外部觀察者,有機會處理控件事件。比如,你需要在某個button被點擊時做一些事情,你就需要派生一個VIEw.OnClickListener對象作為觀察者,調用該控件的setOnClickListener接口注冊進去,當button被點擊,就可以獲得處理點擊事件的機會了。
上面是Java機制的事件基本的原理。但是在android的framework中,已經可以簡化了這個過程如下:
哈哈,是不是很簡單,所以我們這才是在Framework下開發呢!
Layout
Layout是一類特殊的VIEwGroup控件,它們本身沒有任何可顯示內容,形如透明的玻璃盒子,存活的唯一理由,就是其中的內部結構,能夠更好的擺放它的子控件們。比如線性的Layout,LinearLayout。放入這個Layout的子控件,會按水平或垂直方向,排排坐,一個挨著一個按順序排列下去。TableLayout,可以將子控件按照表格的形式,一枚枚放置好。而RelativeLayout則更靈活,可以設定各個控件之間的對齊和排列關系,適合定制復雜的界面。有了Layout的存在,控件和控件之間不再割裂的存在,而是更有機的結合在了一起,設定起來也更為方便。
基本的Layout如下:
線性布局(LinearLayout):線性布局,按照垂直或者水平方向布局組件。 重點
幀布局(FrameLayout):組件從屏幕的左上角坐標布局組件。
表格布局(TableLayout):按照行列方式布局組件。 重點
相對布局(RelativeLayout):相對其它組件的布局方式。重點
絕對布局(AbsoluteLayout):按照絕對坐標來布局。————這個可以就當做沒有!
(2)資源文件主要是R.Java的這個資源的索引文件使用按 和res文件下的各類具體的資源描述概述。
結構和格式
Android的資源文件,是由目錄結構,Xml格式的文件,和純數據文件構成。XML沒學習過,都沒有關系,老師給我們上了兩天的XML的課程,把android中用到的XML的技術和知識都介紹了!!!
android的資源文件,覆蓋面超級廣,只要是和界面相關的,都可以用資源文件表示,比如:UI的樣式,菜單,配置文件,各種描述性字符串,圖片,音頻視頻文件,動畫,顏色,尺寸,風格和樣式,等等等。
所有的資源文件都放在res目錄下,不同類別的資源,需要放置在不同的特定名稱的子文件夾中,或者是寫在特定文件名的文件中
UI背景之類的圖片,都需要扔在drawable這類的文件夾中
所有字符串相關的,都會放到values目錄下形如strings.XML這樣的文件中
(如下圖所示,是一個資源文件目錄結構的截圖...)。
可配置性
(A)國際化:
values是默認的字符串文件夾。
如果你想國家化,使你的程序支持中文簡體,那麼表示簡體中文字符信息的資源,可以放到values-zh-rCN中去,當系統語言環境為簡體中文時,就會呈現出中文的字符信息! 有點Java語言的國際化的味道!!!!
(B)界面的狀態變化
有這樣類似的需求,一個按鈕,我們需要沒有按下去的時候是一種背景,再次按下優勢另外一種背景,就在在兩個背景切換。這個功能可以通過配置文件完成! 哈哈。下次課程就會寫這個例子!!! 先不要著急!
R類
在使用資源後,界面邏輯與底層邏輯的耦合被降低了,但這不意味著,兩者沒有關聯了。比如,需要為某個按鈕增加一個點擊事件,就需要定位到所需的那個按鈕;再比如,你需要使用某個字符串資源,就需要能定位到資源中放置的該字串。
在android中,引入了一個R類。
R.Java 下面是SDK的官方解釋:
它的基本思想是,通過增加一個額外的編譯器,為所有的資源項,都賦予一個32位的整形數來表示,同一個資源像的不同配置,都使用同一個id。這個整形數,就相當於這個資源項的門牌號碼,能夠幫助定位到對應的資源項。所有的這些整形數,都以常量的方式,整合到一個Java類中,這個類就是R類。這樣,在程序中,就可以通過使用這個R類,來查找所需的資源,這就將字符串比較,簡化成了一個整形數的比較,大大的節約了開銷。
注意的事項:
(1)android 中所有的資源文件必須是英文小寫。可以可以有下劃線_. 如果學過正則表達式就是如下: [ a-z0-9_ ] ,,Java課上我們學習過了正則表達式!!