Menu 运用
Menu 使用
Menu
[功能]
Menu 对手机界面友好来说 是不可缺少的
而且 不仅可以通过java来创建/使用 menu 还可以通过xml 来创建/使用
[原理]
1. android 自身提供了对 menu 的良好支持 但是需要注意一点:menu 是绑定在 Activity 的。
2. 我们要做的就是:填充下列函数的实现部分:
public boolean onCreateOptionsMenu(Menu menu)
public boolean onOptionsItemSelected(MenuItem item)
public boolean onPrepareOptionsMenu(Menu menu)
以上3个函数的用途 从函数名应该就能知道了 就不多说了 比较特殊的是 public boolean onPrepareOptionsMenu(Menu menu) 这个函数会在你每次点击MENU键时被调用 所以我们可以在这里根据一些状态的变化来实时更新 menu 的内容 比如标题或作用
比如:有一个播放的功能 要求有一个menu 用来 播放/暂停 功能 且要二者公用一个 menu 且该menu 的标题要实时改变 比如 如果此刻正在播放 要求其标题为"暂停" 反之为"播放" 那么应该如何实现呢? (设:该menu的id为: int play = Menu.FIRST +3 ).代码如下:
[代码]
1. menu @ java
2. menu @ xml
menu_item.xml
over!!!
Menu
[功能]
Menu 对手机界面友好来说 是不可缺少的
而且 不仅可以通过java来创建/使用 menu 还可以通过xml 来创建/使用
[原理]
1. android 自身提供了对 menu 的良好支持 但是需要注意一点:menu 是绑定在 Activity 的。
2. 我们要做的就是:填充下列函数的实现部分:
public boolean onCreateOptionsMenu(Menu menu)
public boolean onOptionsItemSelected(MenuItem item)
public boolean onPrepareOptionsMenu(Menu menu)
以上3个函数的用途 从函数名应该就能知道了 就不多说了 比较特殊的是 public boolean onPrepareOptionsMenu(Menu menu) 这个函数会在你每次点击MENU键时被调用 所以我们可以在这里根据一些状态的变化来实时更新 menu 的内容 比如标题或作用
比如:有一个播放的功能 要求有一个menu 用来 播放/暂停 功能 且要二者公用一个 menu 且该menu 的标题要实时改变 比如 如果此刻正在播放 要求其标题为"暂停" 反之为"播放" 那么应该如何实现呢? (设:该menu的id为: int play = Menu.FIRST +3 ).代码如下:
private static final int play = Menu.FIRST +3; MediaPlay mp = new MediaPlay(); MenuItem item = menu.findItem(play ); if(mp.isPlaying()){ item.setTitle("stop"); } else { item.setTitle("play"); }
[代码]
1. menu @ java
import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; public class MenuAdd1Usage extends Activity { private static final int Menu1 = Menu.FIRST; private static final int Menu2 = Menu.FIRST+1; private static final int Menu3 = Menu.FIRST+2; private static final int Menu4 = Menu.FIRST+3; private static final int Menu5 = Menu.FIRST+4; private static final int Menu6 = Menu.FIRST+5; private static final int Menu7 = Menu.FIRST+7; public int FLAG_STATUS = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, Menu1, 0, "Menu-1").setIcon(R.drawable.se32); menu.add(0, Menu2, 0, "Menu-2").setIcon(R.drawable.heart); menu.add(0, Menu3, 0, "Menu-3"); menu.add(0, Menu4, 0, "Menu-4"); menu.add(0, Menu5, 0, "Menu-5"); menu.add(0, Menu6, 0, "Menu-6"); menu.add(0, Menu7, 0, "Menu-7"); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case Menu1: //to fill action listened by MenuItem break; } return false; } public boolean onPrepareOptionsMenu(Menu menu) { Log.d("TAG","-------------------------"); MenuItem item = menu.findItem(Menu1); item.setEnabled(false); //to query menu //MenuItem item = menu.findItem(MENU_QUIT); //item.setChecked(false); //item.setTitle("update"); /* to update menu if(FLAG_STATUS == 0){ item.setTitle("QUIT-1"); FLAG_STATUS = 1; } else { item.setTitle("QUIT-0"); FLAG_STATUS = 0; } */ /* to add menu if(FLAG_STATUS == 0){ menu.add(0, MENU_NEW_NEW, 0, "New NEW"); } */ return true; } }
2. menu @ xml
public class MenuAdd2Usage extends Activity { public int FLAG_STATUS = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.layout.menu_item, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.Item_1: Log.d("TAG","[Item_1]"); break; case R.id.Item_2: Log.d("TAG","[Item_2]"); break; case R.id.Item_3: Log.d("TAG","[Item_3]"); break; } return false; } public boolean onPrepareOptionsMenu(Menu menu) { MenuItem item = menu.findItem(R.id.Item_2); item.setEnabled(false); /* if(FLAG_STATUS == 0){ item.setTitle("QUIT-1"); FLAG_STATUS = 1; } else { item.setTitle("QUIT-0"); FLAG_STATUS = 0; } */ return true; } }
menu_item.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/Item_1" android:title="Item_1" /> <item android:id="@+id/Item_2" android:title="Item_2" /> <item android:id="@+id/Item_3" android:title="Item_3" android:enabled="false" /> </menu>
over!!!
1 楼
adamli007
2010-04-21
请问怎样使menu整体居中,菜单上下显示?
2 楼
gryphone
2010-04-22
删
似乎不可以 不过你可以使用PopupWindow + GridView 来达到该效果 更多细节 见:Menu 大变脸
adamli007 写道
请问怎样使menu整体居中,菜单上下显示?
似乎不可以 不过你可以使用PopupWindow + GridView 来达到该效果 更多细节 见:Menu 大变脸