在Android应用中我们经常会使用菜单功能,而它又分为标准菜单和上下文菜单两种。
1.上下文菜单
注册上下文菜单到给定的VIew ------> void registerForContextMenu(View view);
创建你所要展示的上下文菜单元素 -----> void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo);
菜单点击事件处理 ----> boolean onContextItemSelected(MenuItem item);
2.标准菜单,在版本3.0以上后都和ActionBar一起使用,通过物理功能Menu键可以控制。
创建标准菜单 -----> onCreateOptionsMenu(Menu menu); 该方法只执行一次,2种方式用于创建你所需元素,代码创建和menu.xml引入
在显示菜单前调用 ----> onPrepareOptionsMenu(Menu menu); 用于控制是否显示菜单,修改编辑菜单
菜单点击事件处理 -----> onOptionsItemSelected(MenuItem item);
menu.xml资源需要放在res/menu中
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_add" android:icon="@android:drawable/ic_menu_add" android:title="@string/action_bar_add" /> <item android:id="@+id/action_edit" android:icon="@android:drawable/ic_menu_edit" android:title="@string/action_bar_edit" app:showAsAction="always" /> <item android:id="@+id/action_share" android:icon="@android:drawable/ic_menu_share" android:title="@string/action_bar_share" app:showAsAction="ifRoom" /> <item android:id="@+id/action_sort" android:icon="@android:drawable/ic_menu_sort_by_size" android:title="@string/action_bar_sort" app:showAsAction="ifRoom"> <menu> <item android:id="@+id/action_sort_size" android:icon="@android:drawable/ic_menu_sort_by_size" android:title="@string/action_bar_sort_size" android:onClick="onSort" /> <item android:id="@+id/action_sort_alpha" android:icon="@android:drawable/ic_menu_sort_alphabetically" android:title="@string/action_bar_sort_alpha" android:onClick="onSort" /> </menu> </item> </menu>
代码例子:
public class MainActivity extends Activity { private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); btn = (Button) findViewById(R.id.btn); // 给Button 注册上下文菜单 registerForContextMenu(btn); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.onCreateContextMenu(menu, v, menuInfo); // 代码创建上下文菜单元素 ,其中itemId是唯一的 menu.add(1, 1, 1, "删除"); menu.add(1, 2, 1, "更新"); menu.add(1, 3, 1, "新增"); // 通过引入menu.xml的方式控制菜单元素 MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actions, menu); } @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub int itemId = item.getItemId(); switch (itemId) { case 1: Toast.makeText(getApplicationContext(), "click删除菜单", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(getApplicationContext(), "click更新菜单", Toast.LENGTH_SHORT).show(); break; case 3: Toast.makeText(getApplicationContext(), "click新增菜单", Toast.LENGTH_SHORT).show(); break; default: break; } return super.onContextItemSelected(item); } @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub Log.i("TAG", "onCreateOptionsMenu"); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actions, menu); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { // TODO Auto-generated method stub // 这里可以做修改菜单和控制菜单有效 return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub Toast.makeText(this, "Selected Item: " + item.getTitle(), Toast.LENGTH_SHORT).show(); return true; } }这样菜单功能就完成。