菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu),今天这讲是ContextMenu 


1.选择菜单OptionsMenu
点击Menu key,显示选择菜单
实现方法.onCreateOptionsMenu()此方法只会调用一次,即第一次显示的时候会调用.
如果需要更新菜单项.可以在onPrepareOptionsMenu()方法中操作.
当菜单被选择的时候,在OnOptionsItemSelected()方法中实现.

2.上下文菜单ContextMenu
在view按2s,就会显示上下文菜单.onCreateContextMenu每次都会调用.选中的时候,在onContextItemSelected()方法中实现.


概述:

Android 的上下文菜单类似于 PC 上的右键菜单。当为一个视图注册了上下文菜单之后,长按(2 秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单。任何视图都可以注册上下文菜单,不过,最常见的是用于列表视图ListView的item。

注意:Android 的上下文菜单不支持图标或快捷键。

创建一个上下文菜单的步骤:

1. 覆盖 Activity 的 onCreateContenxtMenu() 方法,调用 Menu 的 add 方法添加菜单项(MenuItem)。

2. 覆盖 Activity 的 onContextItemSelected() 方法,响应上下文菜单菜单项的单击事件。

3. 调用 registerForContextMenu() 方法,为视图注册上下文菜单。

示例:

MainActivity.java 文件:

//file name: MainActivity.java
package hi.braincol.local.contextMenu;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.util.Log;
public class MainActivity extends ListActivity {
    
    private static final int ITEM1 = Menu.FIRST;
    private static final int ITEM2 = Menu.FIRST+1;
    private static final int ITEM3 = Menu.FIRST+2;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);   
        showListView();
        
        //为 ListView 的所有 item 注册 ContextMenu
        registerForContextMenu(getListView());
        //这里的registerForContextMenu()也可以用下面的语句替代
        //getListView().setOnCreateContextMenuListener(this);
    }
    
    private void showListView(){
        String[] mString = new String[]{
                "路飞-Monkey D Luffy", 
                "奈美-Nami", 
                "卓洛-Zoro",
                "山治-Sanji", 
                "尼可·罗宾-Ms. All Sunday", 
                "乌索普-usoppu", 
                "托尼托尼·乔巴-Tony Tony Chopper",
        };
        ArrayAdapter<String> mla = new ArrayAdapter<String>(MainActivity.this, 
                R.layout.main, mString);
        MainActivity.this.setListAdapter(mla);      
    }
    
    //上下文菜单,本例会通过长按条目激活上下文菜单
    @Override
    public void onCreateContextMenu(ContextMenu menu, View view, 
            ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("人物简介");
        //添加菜单项
        menu.add(0, ITEM1, 0, "特长");
        menu.add(0, ITEM2, 0, "战斗力");
        menu.add(0, ITEM3, 0, "经典语录");
    }
    
    //菜单单击响应
    @Override
    public boolean onContextItemSelected(MenuItem item){
        //获取当前被选择的菜单项的信息
        //AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
        //Log.i("braincol",String.valueOf(info.id));        
        switch(item.getItemId()){
        case ITEM1:
            //在这里添加处理代码
            
            break;
        case ITEM2:
            //在这里添加处理代码
            
            break;    
        case ITEM3:
            //在这里添加处理代码
            
            break;
        }
        return true;
    }
    
}

main.xml 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myTextView"
    android:textSize="20sp"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="@string/hello"
    />

运行结果:


onCreateOptionsMenu --> 图片文字

1 方法一,文字图标在xml规划好,文字定义在string.xml,图片直接从工程文件中调用,至于所有的文字图片排版,放在单独的menu.xml文件中

[java] view plain copy
  1. @Override
  2. publicbooleanonCreateOptionsMenu(Menumenu){
  3. super.onCreateOptionsMenu(menu);
  4. MenuInflatermenuInflater=getMenuInflater();
  5. menuInflater.inflate(R.menu.menu,menu);
  6. returntrue;
  7. }
[html] view plain copy
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <menuxmlns:android="http://schemas.android.com/apk/res/android">
  3. <itemandroid:icon="@android:drawable/ic_menu_mylocation"
  4. android:id="@+id/centerOnLocationMenuItem"android:title="@string/myLocation"/>
  5. <itemandroid:icon="@android:drawable/ic_menu_more"android:id="@+id/chooseStop"
  6. android:title="@string/chooseStop"/>
  7. <itemandroid:icon="@android:drawable/ic_menu_mylocation"
  8. android:id="@+id/centerOnBostonMenuItem"android:title="@string/bostonsLocation"/>
  9. <itemandroid:icon="@android:drawable/ic_menu_preferences"
  10. android:id="@+id/settingsMenuItem"android:title="@string/settings"/>
  11. <itemandroid:icon="@android:drawable/ic_menu_more"android:id="@+id/chooseRoute"
  12. android:title="@string/chooseRoute"/>
  13. <itemandroid:icon="@android:drawable/ic_menu_rotate"android:id="@+id/refreshItem"
  14. android:title="@string/refresh"/>
  15. </menu>


2,动态创建菜单

[java] view plain copy
  1. @Override
  2. publicbooleanonCreateOptionsMenu(Menumenu){
  3. //TODOAuto-generatedmethodstub
  4. menu.add(0,LOCATION,1,R.string.location);
  5. menu.add(0,SEARCH,2,R.string.search);
  6. menu.add(0,SHOWROUTE,3,R.string.vechicleLocation);
  7. menu.add(0,ALLROUTE,4,R.string.allRoute);
  8. returnsuper.onCreateOptionsMenu(menu);
  9. }
[java] view plain copy
  1. publicbooleanonCreateOptionsMenu(Menumenu)
  2. {
  3. menu.add(0,CLASSIC_MENU_REFRESH,0,R.string.menu_refresh).setIcon(R.drawable.cmcc_toolbar_refresh);
  4. returnsuper.onCreateOptionsMenu(menu);
  5. }

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android实现字体闪烁动画的方法
  6. Android中dispatchDraw分析
  7. Android四大基本组件介绍与生命周期
  8. Android(安卓)MediaPlayer 常用方法介绍
  9. Android之菜单总结

随机推荐

  1. Android模拟点击,getevent,sendevent重现
  2. Android(安卓)工具代码
  3. Android(安卓)获取播放视频的相关 内容,
  4. android 添加,删除程序
  5. Android中隐藏标题栏和状态栏
  6. 阻止dialog消失的方法 (Android(安卓)Pla
  7. android的单元测试
  8. Android(安卓)调用中国气象的webservice
  9. Android中给Activity添加返回键
  10. Android(安卓)studio 032 java Tomcat Se