視頻課:https://edu.csdn.net/course/play/7621
android
本章內容app
第1節菜單概述ide
第2節選項菜單和子菜單佈局
第3節上下文菜單字體
第4節使用XML定義菜單this
第5節 ActionBar的做用spa
本章目標.net
瞭解各版本菜單的特徵。orm
掌握建立選項菜單的方法。視頻
掌握菜單事件的處理方法。
掌握動態改變菜單的方法。
掌握建立上下文菜單的方法。
熟悉擴展上下文菜單的方法。
瞭解ActionBar的做用。
Android系統中的菜單
u菜單一般有兩種狀況:選項菜單和上下文菜單
Ø與Activity相關的叫選項菜單,在顯示Activity時按MENU鍵彈出
Ø與具體視圖相關的菜單叫上下文菜單,長按視圖將彈出
選項菜單是個當前Activity關聯的菜單
u對於Android2.3.x及之前的版本
Ø經過設備的「菜單」按鈕彈出
Ø出如今屏幕底部
u對於Android3.x及之後的版本
Ø出如今ActionBar的右端
Ø點擊ActionBar的右端或設備上的「菜單」按鈕彈出
Ø菜單項能夠出如今ActionBar上
Ø
Ø
u能夠在Activity的子類和Fragment的子類中定義選項菜單
Ø若是二者都定義了,那麼在顯示的時候將會合並二者的菜單
Ø合併顯示時先顯示Activity的菜單
添加菜單或子菜單的步驟以下:
Ø重寫Activiiy的OnCreateOptionsMenu(Menu menu)的方法,在該方法裏調用Menu對象的方法來添加菜單項或子菜單。
Ø若是但願應用程序能響應菜單項的單擊事件,重寫Activity的onOptionsItemSelected (MenuItem mi)方法便可。
public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);this.menu = menu;return true;}u經過按鈕事件或者其餘事件實現添加菜單的任務
ØMenu類中提供了add方法能夠用途添加菜單
ØMenu類中提供了removeItem方法用於刪除菜單
menu.add(groupId, itemId, order, titleRes);添加普通菜單項並綁定事件public boolean onCreateOptionsMenu(Menu menu) { //添加普通菜單項 menu.add(0, Menu.FIRST, 1, "添加"); menu.add(0,Menu.FIRST+1,2,"編輯"); menu.add(0,Menu.FIRST+2,3,"保存"); return true; }public boolean onOptionsItemSelected(MenuItem item) { //判斷單擊的是哪一個菜單項,並做出響應 switch(item.getItemId()){ case Menu.FIRST: break; //…… } return super.onOptionsItemSelected(item); }
添加子菜單
public boolean onCreateOptionsMenu(Menu menu) { SubMenu colorMenu = menu.addSubMenu("字體顏色"); colorMenu.setIcon(R.drawable.color); // 設置菜單頭的圖標 colorMenu.setHeaderIcon(R.drawable.color); // 設置菜單頭的標題 colorMenu.setHeaderTitle("選擇文字顏色"); colorMenu.add(0, FONT_RED, 0, "紅色"); colorMenu.add(0, FONT_GREEN, 0, "綠色"); colorMenu.add(0, FONT_BLUE, 0, "藍色"); return super.onCreateOptionsMenu(menu); }
初始化選項菜單項事件
u當用於選擇一個菜單項時,onOptionsItemSelected()方法會執行
Ø參數爲MenuItem的對象
Ø經過調用MenuItem的getItemId()方法能夠得到菜單項的ID
Ø以選中的菜單項ID爲標準判斷和處理事件
建立上下文菜單
建立上下文菜單的步驟以下
u重寫Activity 的onCreateContextMenu menu, View source, ContextMenu Context.MenuInfo menulnfo)方法。
u調用Activity的registerForContextMenu(View view)方法爲view組件註冊上下文菜單。
u若是但願應用程序能爲菜單項提供響應,能夠重寫OnContextItemSelected(MenuItem item)方法,或爲指定菜單項綁定事件監聽器。
添加上下文菜單並綁定事件
public void onCreateContextMenu(ContextMenu menu, View source, ContextMenu.ContextMenuInfo menuInfo) { menu.add(0, MENU1, 0, "紅色"); } public boolean onContextItemSelected(MenuItem mi) { switch (mi.getItemId()) { …… } return true; }爲view組件註冊上下文菜單
txt = (TextView) findViewById(R.id.txt);
// 爲文本框註冊上下文菜單
registerForContextMenu(txt);
XML佈局菜單
選項菜單的佈局定義
u選項菜單的資源定義在/res/menu下
u使用<menu>標籤訂義菜單
u使用<item>標籤訂義菜單項,經常使用屬性以下
Øandroid:id 定義菜單項的ID
Øandroid:icon 定義菜單項的圖標
Øandroid:title 定義菜單項的標題文字
Øandroid:showAsAction 定義菜單項什麼時候顯示爲一個ActionItem
l取值:ifRoom | never | withText | always | collapseActionView
u
u
選項菜單的佈局定義示例
<menu xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:id="@+id/action_settings"android:orderInCategory="100"android:showAsAction="never"android:icon="@drawable/home"android:title="@string/action_settings"/><itemandroid:id="@+id/action_add"android:orderInCategory="101"android:showAsAction="never"android:icon="@drawable/add"android:title="@string/action_add"/></menu>
在Activity中覆蓋onCreateOptionsMenu,加載選項菜單
public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}
控制菜單項的顯示
u在佈局菜單的時候能夠經過屬性肯定菜單項是否顯示
Ø不少狀況下,咱們須要在特殊狀況下才顯示菜單項
Ø初始時每每選擇將菜單項隱藏
l只須要給item添加android:visible屬性, l取值爲false
選項菜單支持子菜單
u子菜單的定義只要在佈局中的item標籤內嵌入menu就能夠實現
<item android:id="@+id/action_right"android:orderInCategory="103「 android:showAsAction="never"android:icon="@drawable/right「 android:title="@string/action_right"><menu ><item android:id="@+id/action_mail」 android:orderInCategory="100"android:showAsAction="never「 android:icon="@drawable/mail"android:title="@string/action_mail」 /> </menu> </item>
建立上下文菜單
<menu xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:id="@+id/action_copy"android:orderInCategory="100"android:showAsAction="never"android:icon="@drawable/copy"android:title="@string/action_copy"/><itemandroid:id="@+id/action_past"android:orderInCategory="101"android:showAsAction="never"android:icon="@drawable/past"android:title="@string/action_past"/></menu>
單選框菜單
構建單選框菜單
u在菜單佈局中有一個標籤叫<group>,其經常使用屬性以下:
Øandroid:checkableBehavior 用於定義group中菜單項的可選特徵
lsingle 表示菜單項爲單選
lall 表示全部菜單項都是可勾選的(複選框)
lnone 表示全部菜單項都不可勾選
u使用group標籤實現單選框菜單
Ø爲menu標籤添加子標籤group
Ø設置group的屬性android:checkableBehavior=「single」
Ø在group標籤中添加item標籤訂義單選菜單項
l在一些低的版本中,單選菜單項不能設置icon
構建單選框菜單
u單選框佈局示例
<menu><group android:checkableBehavior="single" ><item …… android:title="@string/action_add"/><item …… android:title="@string/action_sub"/></group></menu>
複選框菜單
構建複選框菜單
u使用group標籤實現複選框菜單
Ø爲menu標籤添加子標籤group
Ø設置group的屬性android:checkableBehavior=「all」
Ø在group標籤中添加item標籤訂義單選菜單項
l在一些低的版本中,單選菜單項不能設置icon
u也能夠直接爲單個菜單項設置複選框
Ø設置item的屬性android:checkable=「true」
Ø
構建複選框菜單
u複選框佈局示例
<menu><group android:checkableBehavior=「all" ><item …… android:title="@string/action_add"/><item …… android:title="@string/action_sub"/></group></menu>
ActionBar概述
ActionBar誕生於Android3.0版本
u主要用於代替原來的標題欄
u能夠在標題欄上展示更多的內容和功能
Ø顯示選項菜單
Ø提供標籤頁切換方式的導航
Ø
Ø
Ø提供下拉的導航條目
Ø提供交互式活動視圖代替選項條目
Ø
Ø
Ø
Ø
Ø使用程序的圖標做爲返回Home主屏或向上的導航操做
ActionBar能夠帶給用戶明確的動做提示和全局導航
u在須要在界面上明確提示用戶動做的狀況下
u在須要進行全局導航的狀況下
u統一顯示界面重要功能
Ø好比: 搜索、新建、分享等功能出如今顯著位置便於使用
在系統應用中,不少都採用了ActionBar
u好比編寫新短信功能