自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

明明白白Android平臺(tái)的Action Bar

移動(dòng)開發(fā) Android
Action Bar為Android 3.0及更高版本開發(fā)人員提供了一個(gè)相對(duì)較新的導(dǎo)航部件,它取代了傳統(tǒng)的應(yīng)用程序標(biāo)題欄,提供了更豐富的功能,允許你更快遍歷屏幕和應(yīng)用程序的功能,只需很少的點(diǎn)擊,困惑也更少了。

Action Bar是什么?

很長(zhǎng)一段時(shí)間內(nèi),開發(fā)人員一直在為他們的Android應(yīng)用程序設(shè)計(jì)功能標(biāo)題欄,Android 3.0正式引入了Action Bar部件,規(guī)范了應(yīng)用程序?qū)Ш皆O(shè)計(jì),一些新的Android設(shè)備,如平板電腦也拋棄了傳統(tǒng)的導(dǎo)航功能,使用軟件按鈕取代了物理主屏、菜單、后退和搜索按鈕。

Action Bar的概念非常簡(jiǎn)單,如果你的應(yīng)用程序有一個(gè)“選項(xiàng)”菜單,當(dāng)用戶點(diǎn)擊“菜單”按鈕時(shí),出現(xiàn)一個(gè)活動(dòng)項(xiàng)目菜單,你的應(yīng)用程序可以利用Android 3.0中的Action Bar功能,它修改了應(yīng)用程序標(biāo)題欄,以一種易于使用的方式顯示那些先前在“選項(xiàng)”菜單中的活動(dòng),如圖1所示。

Action Bar是什么?
圖 1 蜂巢設(shè)備上的Action Bar

 

Action Bar有哪些行為?

最棘手的是運(yùn)行蜂巢及更高版本的設(shè)備顯示不同Action Bar功能時(shí),取決于應(yīng)用程序的目標(biāo)SDK是設(shè)置為蜂巢還是傳統(tǒng)的API級(jí)別。

我們來看一個(gè)簡(jiǎn)單的例子,假設(shè)我們的應(yīng)用程序包含四個(gè)屏幕:一個(gè)主Activity和三個(gè)“清潔的”Activity(打掃、擦洗和吸塵),我們向主Activity添加一個(gè)選項(xiàng)菜單,以便讓用戶跳轉(zhuǎn)到另三個(gè)Activity,如圖2所示。

Action Bar有哪些行為?
圖 2 帶有一個(gè)選項(xiàng)菜單和四個(gè)屏幕的簡(jiǎn)單應(yīng)用程序

該應(yīng)用程序兩個(gè)基本的組件是選項(xiàng)菜單資源文件和主Activity類,其它Activity類只是簡(jiǎn)單地顯示一個(gè)ImageView和一個(gè)TextView控件,選項(xiàng)菜單資源文件簡(jiǎn)單定義了選項(xiàng)菜單項(xiàng),其內(nèi)容如下:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <menu 
  3.     xmlns:android=">http://schemas.android.com/apk/res/android"> 
  4.     <item 
  5.         android:id="@+id/sweep" 
  6.         android:icon="@drawable/ic_menu_sweep" 
  7.         android:title="@string/sweep"  
  8.         android:onClick="onOptionSweep" /> 
  9.     <item 
  10.         android:id="@+id/scrub" 
  11.         android:icon="@drawable/ic_menu_scrub" 
  12.         android:title="@string/scrub" 
  13.         android:onClick="onOptionScrub" /> 
  14.     <item 
  15.         android:id="@+id/vacuum" 
  16.         android:icon="@drawable/ic_menu_vac" 
  17.         android:title="@string/vacuum"  
  18.         android:onClick="onOptionVacuum" /> 
  19. </menu> 

主Activity類將這個(gè)菜單資源作為一個(gè)選項(xiàng)菜單載入,并定義了每個(gè)選項(xiàng)菜單項(xiàng)的onClick處理程序,其內(nèi)容如下:

  1. package com.mamlambo.actonthis; 
  2. import android.app.Activity; 
  3. import android.content.Intent; 
  4. import android.os.Bundle; 
  5. import android.view.Menu; 
  6. import android.view.MenuInflater; 
  7. import android.view.MenuItem; 
  8. public class ActOnThisActivity extends Activity { 
  9.    /** Called when the activity is first created. */ 
  10.    @Override 
  11.    public void onCreate(Bundle savedInstanceState) { 
  12.       super.onCreate(savedInstanceState); 
  13.       setContentView(R.layout.main); 
  14.    } 
  15.    @Override 
  16.    public boolean onCreateOptionsMenu(Menu menu) { 
  17.       MenuInflater inflater = getMenuInflater(); 
  18.       inflater.inflate(R.menu.cleaningoptions, menu); 
  19.       return true; 
  20.    } 
  21.       public void onOptionSweep(MenuItem i) 
  22.    { 
  23.       startActivity(new Intent(this, SweepActivity.class)); 
  24.    } 
  25.    public void onOptionScrub(MenuItem i) 
  26.    { 
  27.       startActivity(new Intent(this, ScrubActivity.class)); 
  28.    } 
  29.       public void onOptionVacuum(MenuItem i) 
  30.    { 
  31.       startActivity(new Intent(this, VacuumActivity.class)); 
  32.    } 
  33.    } 

到現(xiàn)在為止我們沒有做任何事情,因此我們?cè)诩夹g(shù)上并不需要將應(yīng)用程序的Android清單文件設(shè)置為高目標(biāo)API級(jí)別,我們這里將其設(shè)置為API級(jí)別9。

 

  1. <uses-sdk android:minSdkVersion="9" /> 

當(dāng)我們?cè)诜涑苍O(shè)備上運(yùn)行這個(gè)“傳統(tǒng)的”應(yīng)用程序時(shí),系統(tǒng)欄會(huì)顯示一個(gè)像網(wǎng)格的圖標(biāo)(第四個(gè)),它和傳統(tǒng)Android手機(jī)上的“菜單”按鈕所起的作用是等同的,只不過它變成一個(gè)軟件按鈕了,點(diǎn)擊它將會(huì)顯示選項(xiàng)菜單,就好像是在一部老式智能手機(jī)上一樣,如圖3所示,屏幕頂部的標(biāo)題欄僅僅顯示了應(yīng)用程序的標(biāo)題。

Action Bar有哪些行為?
圖 3 在蜂巢設(shè)備上的傳統(tǒng)應(yīng)用程序行為

如果我們修改應(yīng)用程序Android清單文件的目標(biāo)API級(jí)別,將其設(shè)為API級(jí)別11(蜂巢),應(yīng)用程序?qū)⒆詣?dòng)應(yīng)用Action Bar機(jī)制。

 

  1. <uses-sdk android:minSdkVersion="11" /> 

默認(rèn)情況下,標(biāo)題欄顯示了應(yīng)用程序圖標(biāo),名稱和所謂的溢出菜單圖標(biāo),點(diǎn)擊這個(gè)圖標(biāo)會(huì)彈出一個(gè)文本菜單,列出選項(xiàng)菜單項(xiàng),如圖4所示。

Action Bar有哪些行為?
圖 4 蜂巢設(shè)備上的蜂巢應(yīng)用程序行為

自定義你的Action Bar

當(dāng)你的應(yīng)用程序目標(biāo)設(shè)為蜂巢平臺(tái)時(shí),你可以利用Action Bar部件提供的全部功能,將你的選項(xiàng)菜單項(xiàng)放在Action Bar的右上角,對(duì)用戶來說使用更方便,控制該行為的主菜單項(xiàng)屬性是android:showAsAction。

這個(gè)屬性可接受的值有:

1、always:這個(gè)值會(huì)使菜單項(xiàng)一直顯示在Action Bar上。

2、ifRoom:如果有足夠的空間,這個(gè)值會(huì)使菜單項(xiàng)顯示在Action Bar上。

3、never:這個(gè)值使菜單項(xiàng)永遠(yuǎn)都不出現(xiàn)在Action Bar上。

4、withText:這個(gè)值使菜單項(xiàng)和它的圖標(biāo),菜單文本一起顯示。

我們修改選項(xiàng)菜單資源文件來看看這個(gè)屬性的不同使用效果,首先,如果你還記得圖1的內(nèi)容,不記得就返回到前面重新觀察一下,你就會(huì)發(fā)現(xiàn),Action Bar中顯示了每個(gè)菜單項(xiàng)的圖標(biāo)和它們的名稱,換句話說就是,每個(gè)菜單項(xiàng)目有以下屬性:

 

  1. android:showAsAction="ifRoom|withText" 

另一個(gè)合理的設(shè)置是顯示Action Bar上的每個(gè)菜單項(xiàng),只要有空間,但沒有雜亂的文字,換句話說就是,每個(gè)菜單項(xiàng)有以下屬性:

 

  1. android:showAsAction="ifRoom" 

圖5顯示了這個(gè)變化在典型蜂巢設(shè)備上的效果。

自定義你的Action Bar
圖 5 當(dāng)空間足夠時(shí),在Action Bar上顯示菜單項(xiàng),包括文本

***,如果我們不想讓Vacuum菜單項(xiàng)顯示在Action Bar上,其屬性值就應(yīng)該是:

 

  1. android:showAsAction="never" 

這樣在Action Bar上將只會(huì)顯示兩個(gè)菜單項(xiàng):Sweep和Scrub。在右上角,你會(huì)再次看到溢出菜單,點(diǎn)擊它就會(huì)看到被設(shè)為“never”的菜單項(xiàng),如Vacuum,以及其它不適合放在Action Bar上的菜單項(xiàng),如圖6所示。

自定義你的Action Bar
圖 6 在Action Bar上顯示部分菜單項(xiàng),其它菜單項(xiàng)永遠(yuǎn)不顯示(顯示在溢出菜單中)

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <menu 
  3.     xmlns:android="http://schemas.android.com/apk/res/android"> 
  4.     <item 
  5.         android:id="@+id/sweep" 
  6.         android:icon="@drawable/ic_menu_sweep" 
  7.         android:title="@string/sweep"  
  8.         android:onClick="onOptionSweep" /> 
  9.     <item 
  10.         android:id="@+id/scrub" 
  11.         android:icon="@drawable/ic_menu_scrub" 
  12.         android:title="@string/scrub" 
  13.         android:onClick="onOptionScrub" /> 
  14.     <item 
  15.         android:id="@+id/vacuum" 
  16.         android:icon="@drawable/ic_menu_vac" 
  17.         android:title="@string/vacuum"  
  18.         android:onClick="onOptionVacuum" /> 
  19. </menu> 

處理Action Bar上的應(yīng)用程序圖標(biāo)點(diǎn)擊行為

Action Bar的另一個(gè)功能是用戶可以點(diǎn)擊左上角的應(yīng)用程序圖標(biāo),雖然默認(rèn)情況下點(diǎn)擊行為沒有任何反應(yīng),但如果增加一個(gè)自定義“主屏幕”功能,或關(guān)聯(lián)到你的啟動(dòng)屏幕,那樣操作起來更有趣。

假設(shè)你想更新ScrubActivity類中的默認(rèn)Action Bar,以便點(diǎn)擊應(yīng)用程序圖標(biāo)時(shí)用戶可以返回到主Activity(同時(shí)清空Activity stack)。

實(shí)現(xiàn)起來也很簡(jiǎn)單,你只需要為ScrubActivity類實(shí)現(xiàn)onOptionsItemSelected()方法,并處理特定的菜單項(xiàng)標(biāo)識(shí)符android.R.id.home即可,例如:

 

  1. @Override 
  2. public boolean onOptionsItemSelected(MenuItem item)  
  3. {     
  4.    switch (item.getItemId())  
  5.    {         
  6.       case android.R.id.home:             
  7.          Intent intent = new Intent(this, ActOnThisActivity.class);             
  8.          intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  9.          startActivity(intent);             
  10.          return true;         
  11.       default:             
  12.          return super.onOptionsItemSelected(item);     
  13.    } 

就這么簡(jiǎn)單,你也可以在應(yīng)用程序圖標(biāo)的左邊顯示一個(gè)箭頭,在你Activity的onCreate()方法中聯(lián)合使用setDisplayHomeAsUpEnabled()方法,可以返回到指定的屏幕。

 

  1. ActionBar bar = getActionBar(); 
  2. bar.setDisplayHomeAsUpEnabled(true); 

如圖7所示,我們?cè)赟weep屏幕上啟用了這個(gè)功能,在Action Bar上增加了一個(gè)箭頭小圖標(biāo)。

處理Action Bar應(yīng)用程序圖標(biāo)點(diǎn)擊行為
圖 7 帶有可點(diǎn)擊的主屏幕按鈕和一個(gè)返回箭頭的Action Bar

使用不需要Action Bar的屏幕

當(dāng)你將應(yīng)用程序目標(biāo)設(shè)為API 11或更高時(shí),你的所有屏幕默認(rèn)都將擁有Action Bar,如果你不想用這個(gè)新部件,有幾種方法可以移除它,最簡(jiǎn)單的方法可能是通過編程手段直接在Activity類中關(guān)閉它,例如,我們可以用下面兩行代碼關(guān)閉Vacuum屏幕上的Action Bar,只需要將這兩行代碼添加到Activity類的onCreate()方法中即可。

 

  1. ActionBar bar = getActionBar(); 
  2. bar.hide(); 

這兩行代碼將移除屏幕頂部的整個(gè)Action Bar,應(yīng)用程序名稱也不會(huì)顯示了,你也可以隱藏Action Bar,在布局文件中創(chuàng)建一個(gè)特殊的自定義主題即可,詳細(xì)情況請(qǐng)閱讀Android SDK文檔。

Action Bar的高級(jí)功能

本文只是對(duì)Action Bar做了簡(jiǎn)單的介紹,可以說只觸及了它的表面,Action Bar是支持樣式的,包括修改背景圖像和其它自定義屬性,它們也支持多個(gè)其它成熟的視圖類型和部件,不僅僅是那些在選項(xiàng)菜單中的菜單項(xiàng),如標(biāo)簽和下來列表,你甚至可以增加其它類型的視圖控件,創(chuàng)建Action Bar功能區(qū)域,詳細(xì)情況請(qǐng)閱讀Android SDK文檔。

小結(jié)

如果你的應(yīng)用程序已經(jīng)使用了選項(xiàng)菜單,當(dāng)你把目標(biāo)設(shè)為蜂巢設(shè)備時(shí),你可以利用Action Bar的所有功能,就像向你的菜單布局文件增加一些新屬性一樣簡(jiǎn)單。每個(gè)屏幕的Action Bar都是可定制的,作為開發(fā)人員,你可以控制顯示哪個(gè)項(xiàng)目,以及如何顯示,當(dāng)你想留更多的屏幕顯示游戲畫面等內(nèi)容時(shí),你甚至可以移除整個(gè)Action Bar。

原文出處:http://www.informit.com/articles/article.aspx?p=1743642

責(zé)任編輯:佚名 來源: it168
相關(guān)推薦

2010-09-06 17:35:03

PPPOE配置

2020-02-10 19:42:01

CPIP 協(xié)議,

2011-04-27 17:05:39

2010-10-08 15:05:00

無線路由設(shè)置

2012-02-20 21:59:08

無線路由設(shè)置

2021-09-30 09:59:23

OSPF網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)技術(shù)

2021-02-23 08:10:18

Nginx反向代理負(fù)載均衡器

2021-09-26 07:38:39

組合問題數(shù)據(jù)結(jié)構(gòu)算法

2010-07-05 15:33:49

2010-06-29 14:38:14

Linux服務(wù)器

2010-08-03 09:17:00

2010-09-09 09:52:03

Linux服務(wù)器

2010-07-14 09:55:12

2010-08-25 09:09:58

2010-10-15 10:01:19

無線網(wǎng)絡(luò)構(gòu)建

2010-08-06 10:00:05

負(fù)載均衡

2013-05-23 11:16:28

大數(shù)據(jù)技術(shù)大數(shù)據(jù)AdTime

2010-01-13 17:07:21

防輻射機(jī)箱選購

2020-11-18 09:25:39

Docker

2020-12-22 10:57:36

DockerLinux程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)