当前位置:操作系统 > 安卓/Android >>

android菜单

1.选项菜单(OptionsMenu):

Options Menu是在单击Menu菜单键的时候弹出的菜单


      public boolean onCreateOptionsMenu(Menu menu):首次显示的时候调用

  public boolean onOptionsItemSelected(MenuItem item):选中菜单项后发生的动作。

  public void onOptionsMenuClosed(Menu menu):菜单关闭后发生的动作。

  public boolean onPrepareOptionsMenu(Menu menu):每次显示前调用

  public boolean onMenuOpened(int featureId, Menu menu):菜单打开后发生的动作。可以在这里Disable/enable某个菜单项

       代码创建子菜单项:

    

public boolean onCreateOptionsMenu(Menu menu) {
 3         // TODO Auto-generated method stub
 4         menu.add(1, 1, 1, "设置");
 5         return super.onCreateOptionsMenu(menu);
 6     }
 7     @Override
 8     public boolean onMenuItemSelected(int featureId, MenuItem item) {
 9         // TODO Auto-generated method stub
10         if(item.getItemId() == 1){
11             finish();
12         }
13         return super.onMenuItemSelected(featureId, item);
14     } 

xml创建子菜单项:


这里我在res/menu/中定义自己的Menu的xml文件mymenu.xml:


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/about"
        android:icon="@drawable/about"
        android:title="关于"/>
    <item
        android:id="@+id/exit"
        android:icon="@drawable/exit"
        android:title="退出"/>

</menu>

  然后在Activity中的onCreateOptionsMenu()回调函数中生成这个Menu:


public class ShowMenu extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    /**
     * 这个方法只会调用一次,这个Menu会被反复调用
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.mymenu, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        int itemId = item.getItemId();
        switch (itemId)
        {
        case R.id.about:
            Toast.makeText(this, "这是个OptionsMenu测试", Toast.LENGTH_LONG).show();
            return true;
        case R.id.exit:
            finish();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
   
}

    
2.上下文菜单(ContextMenu)

长按一个组件的时候弹出来的菜单,Options Menu的Item可以添加图标和快捷键,而Context Menu则不能


1、覆盖Activity的onCreateContextMenu()方法,调用Menu的add()方法添加菜单选项

//上下文才菜单(Context Menu),当用户长时间按键不放弹出的菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
  ContextMenuInfo menuInfo) {
 menu.add(0, 0, 0, "contextMenu");
 menu.add(0, 1, 0, "contextMenu1");
 menu.add(0, 2, 0, "contextMenu2");
}
 

2、覆盖onContextItemSelected()方法,响应菜单事件

//选择上下文菜单之后触发的事件
@Override
public boolean onContextItemSelected(MenuItem item) {
 System.out.println(item.getItemId());
 switch(item.getItemId()){
 case 0:
  Toast.makeText(getApplicationContext(), "case 0", Toast.LENGTH_SHORT).show();
  break;
 case 1:
  Toast.makeText(getApplicationContext(), "case 1", Toast.LENGTH_SHORT).show();
  break;
 case 2:
  Toast.makeText(getApplicationContext(), "case 2", Toast.LENGTH_SHORT).show();
  break;
 }
 return true;
}
 

3、调用Activity的registerForContextMenu()方法,为视图注册上下文菜单

TextView textView = (TextView)findViewById(R.id.textView);
registerForContextMenu(textView);
 备注:一定要有可以注册的控件,然后用户一直按着这个控件,就会弹出ContextMenu的内容

          创建菜单也可以用menu中的xml定义(不能有图标和快捷键),其他一样

 

 


 

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,