系統組件:動做條ActionBar

  引入:android

  

  

  概念:動做欄或導航控件,Action Bar 就是替換3.0 之前的title bar 和Menu。api

 

  主要功能:app

    1)突出顯示一些重要操做(如「註冊」,「登陸」,「搜索」等,將平時隱藏的選項菜單顯示成活動項ActionItem。ide

    2)在程序中保持一致的頁面導航和切換方式。這中基於Tab的導航方式,能夠切換多個Fragment。佈局

    3)提供基於下拉的導航菜單。this

    4)使用程序Logo,做爲返回App的Home主頁面或者向上的導航操做。spa

  

  組成:code

    ActionBar分紅四個區域xml

      

      1)app icon 圖標區對象

         可顯示App的icon,也可用其餘圖標代替。當軟件再也不最高級頁面時,圖標左側會顯示一個左箭頭,用戶能夠經過這個箭頭向上導航。

      2)View Control 視圖切換

         drop-down菜單或tab controls,也能夠用來顯示非交互的內容,例如app title或更長的品牌信息。

      3)action buttons 動做按鈕

         這個放最重要的軟件功能,放不下的按鈕就自動進入Action Overflow了。

      4)action overflow 溢出動做項

         不經常使用的操做項目自動放入Action Overflow

 

  ActionBar操做

    1.添加與刪除ActionBar

      添加ActionBar:設置主題帶有AcitonBar就好了,如Theme.Hole,3.0一下使用ActionBar,需導入v7兼容包。

      刪除ActionBar:

        1)設置主題沒有ActionBar

        2)主題隱藏ActionBar,getSupportActionBar().hide()

      

    2.添加ActionBar動做項

      1)動做項寫入Menu文件,如同添加系統菜單同樣,重寫onCreateOptionsMenu()

    eg:    

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 
 5     <item android:id="@+id/action_edit"
 6         android:title="編輯"
 7         android:orderInCategory="80"
 8         android:icon="@android:drawable/ic_menu_edit"
 9         app:showAsAction="ifRoom" />
10 
11     <item android:id="@+id/action_share"
12         android:title="分享"
13         android:orderInCategory="90"
14         android:icon="@android:drawable/ic_menu_share"
15         app:showAsAction="ifRoom" />
16 
17     <item android:id="@+id/action_settings"
18         android:title="settings"
19         android:orderInCategory="100"
20         app:showAsAction="never"/>
21 
22 </menu>

    2)經過給<item>元素聲明android:showAsAction屬性:

       never:不將該MenuItem顯示在ActionBar上(是默認值)

      always:老是將MenuItem顯示在ActionBar上

      ifRoom:當ActionBar位置充裕時將該MenuItem顯示在ActionBar上

      withText:將該MenuItem顯示在ActionBar上,兵顯示該菜單項的文本

      collapseActionView:將該ActionView摺疊成普通菜單項(api>=14)

    3)重寫OnOptionsItemSelected()回調方法,處理用戶選擇動做項的操做。

    

   3.啓動程序圖標導航

    做用:是讓App的Logo也變成能夠點擊的導航圖標

      ActionBar actionBar = getSupportActionBar();//獲取當前Activity的ActionBar

      actionBar.setDisplayHomeAsUpEnabled(true);//設置是否將Logo圖標轉成可點擊的按鈕,並在圖標前添加一個向左的箭頭

      actionBar.setDisplayShowHomeEnabled(true);//設置是否顯示Logo圖標

      actionBar.setHomeButtonEnabled(true);//設置是否將Logo圖標設置成可點擊的按鈕

      

   4.ActionView的使用(Api>=11,getActionView()有效

      做用:可編輯的動做項,如SearchView能夠直接在ActionBar上使用

        添加ActionView的兩種方式:

        1)android:actionLayout,指定一個佈局文件

        2)android:actionViewClass屬性,指定實現CollaspsibleActionView的子類

       手動展開和摺疊菜單欄:

        MenuItem.expandActionView()//展開ActionView

        MenuItem.collapseActionView()//摺疊ActionView

        MunuItem.setOnActionExpandListener()//設置展開或摺疊的監聽事件

       eg:

 1 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
 2 
 3     <!-- actionViewClass 設置ActionView控件的UI類 -->
 4     <item
 5         android:id="@+id/action_search"
 6         android:orderInCategory="100"
 7         android:showAsAction="ifRoom"
 8         android:actionViewClass="android.widget.SearchView"
 9         android:title="檢索"/>
10 
11     <!-- actionLayout 屬性設置自定義ActionView的佈局文件 -->
12      <item
13         android:id="@+id/action_search_custom"
14         android:orderInCategory="100"
15         android:showAsAction="always|collapseActionView"
16         android:actionLayout="@layout/actionview_search"
17         android:icon="@android:drawable/ic_menu_agenda"
18         android:title="自定義檢索"/>
19     
20 </menu>

 

 

   5.ActionBar的Tab導航

    做用:一般用選項標籤使Fragment之間相互切換

    步驟:

      1)設置導航模式,調用ActionBar的setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)
      2)建立多個Tab,設置setTabListener()監聽事件,添加到ActionBar

      3)實現TabLisenter接口的方法

      eg:

 1 private void initActionBar() {
 2         // TODO 初始化ActionBar中的相關設置
 3         actionBar=getActionBar();//獲取ActionBar對象
 4         
 5         //1. 設置ActionBar的導航模式: tab選項卡的導航模式
 6         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
 7         
 8         //3. 建立Tab
 9         Tab tab1=actionBar.newTab()
10                          .setText("頭條")
11                          .setIcon(android.R.drawable.ic_menu_add)
12                          .setTabListener(this);
13         
14         Tab tab2=actionBar.newTab()
15                  .setText("軍事")
16                  .setIcon(android.R.drawable.ic_menu_agenda)
17                  .setTabListener(this);
18         
19         Tab tab3=actionBar.newTab()
20                  .setText("國內")
21                  .setIcon(android.R.drawable.ic_menu_delete)
22                  .setTabListener(this);
23         
24         Tab tab4=actionBar.newTab()
25                  .setText("國際")
26                  .setIcon(android.R.drawable.ic_menu_camera)
27                  .setTabListener(this);
28         
29         Tab tab5=actionBar.newTab()
30                  .setText("體育")
31                  .setIcon(android.R.drawable.ic_menu_compass)
32                  .setTabListener(this);
33         
34         //4. 增長Tab到ActionBar中
35         actionBar.addTab(tab1);
36         actionBar.addTab(tab2);
37         actionBar.addTab(tab3);
38         actionBar.addTab(tab4);
39         actionBar.addTab(tab5);
40     }

 

     實現TabListener接口的三個方法:

 1 @Override
 2     public void onTabSelected(Tab tab, FragmentTransaction ft) {
 3         // TODO 選擇Tab事件
 4         Log.i("info", "onTabSelected-----"+tab.getPosition());
 5         
 6         ContentFragment cf=
 7                 ContentFragment.newInstace(tab.getText().toString());
 8         
 9         ft.replace(R.id.mainLayoutId, cf);
10         
11     }
12 
13     @Override
14     public void onTabUnselected(Tab tab, FragmentTransaction ft) {
15         // TODO 取消選擇Tab事件
16         Log.i("info", "onTabUnselected-----"+tab.getPosition());
17     }
18 
19     @Override
20     public void onTabReselected(Tab tab, FragmentTransaction ft) {
21         // TODO 從新選擇Tab事件
22         Log.i("info", "onTabReselected-----"+tab.getPosition());
23         
24     }

 

     佈局文件:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity"
10     android:id="@+id/mainLayoutId" >
11     
12 </RelativeLayout>

 

   6.ActionBar擴充:

      ActionProvide的使用。

      添加下拉式導航 等。

相關文章
相關標籤/搜索