<style type="text/css"> <!-- .pcb {margin-right:0pt} --> </style>
|
android ActionBar與Menu - 1 - api demos 學(xué)習(xí) android ActionBar與Menu - 2 - email中ActionBar分析 這里以Email為例,簡單分析一下ActionBar在實(shí)際中的應(yīng)用
2012-6-9 12:46:15 上傳
下載附件
(41.52 KB)
上面是在模擬器上登錄原生Email的截圖 這里說一下所謂的原生: 原生不是指大家買來手機(jī)之后沒有修改過任何內(nèi)容,軟件本身的樣子。也不是指google的各種親兒子本身的樣子,因?yàn)闊o論是前者還是后者,最起碼都是要經(jīng)過優(yōu)化和修復(fù)bug的,不是親兒子那就很有可能進(jìn)行了整容,讓你看不出原來的樣子 這里的原生是用google發(fā)布的源碼編譯出來的apk,安裝到手機(jī)或模擬器上面大家就可以看到 我們主要看看Email如何使用ActionBar和menu的 頁面可以發(fā)現(xiàn),Email既有AcionBar又有menu,menu被放在了底部,先看ActionBar Email的主Activity是EmailActivity,我就不畫類圖了,因?yàn)榭偸钱嫴幻靼祝抡`導(dǎo)大家,所以就用類似堆棧log的形式來介紹
這里初始化了一個(gè)UIController,其中的關(guān)系是這樣的 UIControllerBase為父類,是一個(gè)抽象類,下面有兩個(gè)實(shí)現(xiàn)類分別為UIControllerOnePane和UIControllerTwoPane(實(shí)在理解不了為什么這么命名。。。) UIControllerOnePane為手機(jī)UI實(shí)現(xiàn),UIControllerTwoPane為平板UI實(shí)現(xiàn),我們這里只考慮UIControllerOnePane
這里包含了一個(gè)ActionBarController,createActionBarController是抽象方法,下面是UIControllerOnePane的實(shí)現(xiàn)
最關(guān)鍵的就是ActionBarController了,它包含ActionBar所有內(nèi)容
從上面可以看出,ActionBar實(shí)際上也不復(fù)雜,只是設(shè)置了顯示選項(xiàng)和一個(gè)CustomView,復(fù)雜的內(nèi)容幾乎全部集中在這個(gè)CustomView上了
當(dāng)點(diǎn)擊CustomView時(shí)候會有彈出下拉框,mAccountDropdown就發(fā)揮作用了
2012-6-9 12:46:15 上傳
下載附件
(39.36 KB)
設(shè)置了mAccountSpinner.setOnClickListener,調(diào)用到mAccountDropdownshow() mAccountDropdownshow顯示由mAccountsSelectorAdapter提供
其中的數(shù)據(jù)由CursorWithExtras com.android.email.activity.ActionBarController.mCursor提供 mCursor只在一個(gè)地方進(jìn)行刷新,那就是加載賬戶郵箱信息的時(shí)候
我們可以發(fā)現(xiàn),加載完畢之后Cursor更新了,然后updateTitle,不用去看函數(shù)也能猜出這里是更新ActionBar 為了刷新列表,調(diào)用了下面語句
updateTitle就不再進(jìn)行分析了,里面幾乎都是刷新那個(gè)CustomView的內(nèi)容 下面看看底部的菜單,之前的學(xué)習(xí)中,api demos里并沒有演示這種情況,我們用hierarchyviewer查看,發(fā)現(xiàn)頁面上下都是一個(gè)ActionBarContainer的容器 上面的ActionBar我們已經(jīng)知道它是怎么來的了,那下面的呢?原因在于manifest的配置
splitActionBarWhenNarrow使得ActionBar被拆分成上下兩個(gè)部分 splitActionBarWhenNarrow用于顯示Activity在窄屏設(shè)備(如豎屏手機(jī))上運(yùn)行時(shí)的所有menu項(xiàng)。當(dāng)然,如果手機(jī)有menu鍵的時(shí)候,當(dāng)menu項(xiàng)過多而顯示不下的時(shí)候按Menu鍵即可 這時(shí)迷題已解,沒有什么神秘的地方了,看看menu配置,一目了然
當(dāng)我們橫屏的時(shí)候,menu就會跑到上面去了
2012-6-9 12:46:15 上傳
下載附件
(43.73 KB)
下面是帶回退導(dǎo)航的
2012-6-9 12:46:15 上傳
下載附件
(8.44 KB)
他能使用戶回到上一個(gè)頁面(并不是上一個(gè)activity,回到上一個(gè)activity可以通過按back鍵實(shí)現(xiàn))
在之前的refreshInernal中已經(jīng)設(shè)置過了 當(dāng)我們打開或新建一個(gè)郵件的時(shí)候,頁面會跳轉(zhuǎn)到新的activity
2012-6-9 12:46:15 上傳
下載附件
(24.7 KB)
這里我們看到了,頁面依然有回退導(dǎo)航,點(diǎn)擊之后能回退到上一個(gè)頁面,當(dāng)然,不再是當(dāng)前的activity了 那么它是如何做到的,代碼如下
點(diǎn)擊回退導(dǎo)航時(shí),觸發(fā)的menu是android.R.id.home 剩下的事情就好辦了,這里交給了onBack來處理 至此Email應(yīng)用的ActionBar和menu就基本分析完了,如果有不準(zhǔn)確的地方還希望大家指正 |
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

