引入: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的使用。
添加下拉式導航 等。