Android-操作欄之圖標導航


  想實現圖標向上導航功能,步子分兩步走:

  1.樣式上要改變-->圖標要變成可點擊的按鈕,並有一個向左的箭頭。

  2.功能上要實現-->實現向上導航

  首先談第一步:

  對於擁有fragment的activity來說,想要讓圖標具有向上導航的功能,需要在fragment中設置activity的actionBar的showHomeAsUp的值為true。

  

  

  值得讀者注意的是,由於setDisplayHomeAsUpEnabled()方法是在API11以后出現的,因此我們需要采取兼容措施:

  1.增加TargetApi注釋,避免Android Lint報錯

  2.進行系統版本判斷實現向下兼容

  再來談第二步:無論什么功能,都應該在響應方法里寫。

  請讀者參考http://www.cnblogs.com/JiMoRuXue/p/5048297.html,了解選項菜單的創建,響應。

  這里和選項菜單類似:

  首先在fragment中設置HasOptionsMenu的值為true(目的是告訴FragmentManager,該fragment要代表其所在activity實現選項菜單的回調方法)

  然后重寫onOptionsItemSelected(MenuItem item)方法。

  值得注意的是,選項菜單具有自己的xml視圖以及item的資源ID,但是圖標已具有現成的資源ID:android.R.id.home

  

    現在我們需要做的是什么呢?可能大部分人想到的是用startActivity(i)跳轉到上層的activity。這里引入一個重要的知識點:intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP),該方法會讓系統首先在回退棧中尋找指定activity的實例,如存在,就彈出在實例activity上面的所有activity,讓啟動的activity出現在棧頂。

    不過還有另一種更好的實現層級式導航的方法:NavUtils類+manifest元數據

    步驟如下:

      1.在manifest為activity添加元數據(name="android.support.PARENT_ACTIVITY"),這個元數據描述了該Activity的父級Activity

      2.調用NavUtils.getParentActivityName(Activity),檢查元數據中是否指定了父級Activity,如指定有,執行3

      3.調用NavUtils.navigateUpFromSameTask(getActivity())

    

    

 

    為什么說NavUtils+元數據更好呢?

     1.將描述Activity之間關系的語句由java轉為了xml配置

    2.保證了fragment的獨立性

    另外補充一點知識:在如何獲取activity的父級activity時,前面講的是使用NavUtils的getParentActivityName()方法,該方法本質上是NavUtils獲取Activity的meta-data,看看有沒有

叫"android.support.PARENT_ACTIVITY"的,有就獲取它的值。

    但我們也可以通過普適性的方法,獲取meta-data的信息,這樣就可以不用非將acitivy的name設為android.support.PARENT_ACTIVITY了

    因為所有的meta-data最終都是以bundle的形式保存在PackageManager中,因此代碼如下

    

    此外,需要說明的是,操作欄是API11級以后出現,因此需要兼容。而選項菜單並不是API11級以后出現的。

    

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM