元素。- :創(chuàng )建一個(gè)MenuItem,代表了菜單中一個(gè)選項。
:對菜單項進(jìn)行分組,可以以組的形式操作菜單項。
- 元素除了常規的id、icon、title屬性的支持,還有一個(gè)重要的屬性:android:showAsAction,這個(gè)屬性是起兼容性的,描述了在A(yíng)ndroid的高版本中,菜單項何時(shí)以何種方式加入到ActionBar中。
是對菜單進(jìn)行分組,分組后的菜單顯示效果并沒(méi)有區別,唯一的區別在于可以針對菜單組進(jìn)行操作,這樣對于分類(lèi)的菜單項,操作起來(lái)更方便,提供如下的操作:
Menu.setGroupCheckable():菜單組內的菜單是否都可選。
Menu.setGroupVisible():是否隱藏菜單組的所有菜單。
Menu.setGroupEnabled():菜單組的菜單是否有用。
如果菜單項需要單選或者多選,可以使用android:checkableBehavior屬性設置,它可以對單個(gè)- 或者設置一個(gè)組,這個(gè)屬性接受三個(gè)參數:single,單選;all,多選,none,沒(méi)有Checked的選項,默認。
當創(chuàng )建好一個(gè)XML菜單資源文件之后,可以使用MenuInflater.inflate()方法填充菜單資源,使XML資源變成一個(gè)可編程的對象。
一、Options menu選項菜單:
OptionMenu,選項菜單,單擊手機上的菜單鍵(MENU)出現,必須設備具有菜單按鈕才可以觸發(fā)。因為屏幕的限制,最多只能展示六個(gè)菜單項,如果定義的菜單項超出了六個(gè),其他的菜單項將被隱藏,第六個(gè)菜單將會(huì )顯示“更多”,點(diǎn)擊展開(kāi)更多的菜單。雖說(shuō)在A(yíng)ndroid3.0之后不再推薦使用選項菜單,但是如果使用了,在A(yíng)ndroid3.0之后的設備上,選項菜單項將被默認轉移到ActionBar中,這個(gè)可以通過(guò)android:showAsAction屬性控制。
創(chuàng )建選項菜單的核心步驟:
(1)重寫(xiě)Activity的onCreateOptionMenu(Menu menu)方法,當菜單第一次被加載時(shí)調用
(2)調用Menu 的add( )方法添加菜單項(MenuItem),同時(shí)可以調用MenuItem的setIcon()方法為菜單項設置圖標(注:Android 3.0之后,即使添加了圖標也不會(huì )顯示)
(3)重寫(xiě)Activity的OptionsItemSelected(MenuItem item)來(lái)響應菜單項(MenuItem)的點(diǎn)擊事件
來(lái)看一下具體的代碼實(shí)現:
新建Android工程MenuTest:
【方式一】通過(guò)配置文件添加Menu選項
(1)在res/menu/main.xml中定義菜單項。main.xml的代碼如下:
復制代碼
復制代碼
注:第9行和第15行的字符串引用,需要提前在strings.xml文件中設置好。
(2)MainActivity.java:
復制代碼
1 package com.example.menutest;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.Menu;
6 import android.view.MenuItem;
7 import android.widget.Toast;
8
9
10 public class MainActivity extends Activity {
11
12 @Override
13 protected void onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15 setContentView(R.layout.activity_main);
16 }
17
18
19 //重寫(xiě)onCreateOptionMenu(Menu menu)方法,當菜單第一次被加載時(shí)調用
20 @Override
21 public boolean onCreateOptionsMenu(Menu menu) {
22 // Inflate the menu; this adds items to the action bar if it is present.
23 //填充選項菜單(讀取XML文件、解析、加載到Menu組件上)
24 getMenuInflater().inflate(R.menu.main, menu);
25 return true;
26 }
27
28 //重寫(xiě)OptionsItemSelected(MenuItem item)來(lái)響應菜單項(MenuItem)的點(diǎn)擊事件(根據id來(lái)區分是哪個(gè)item)
評論