Android中的上下文菜单(ContextMenu)使用案例

在Android中长按住一个控件(像一个文本显示框TextView,一个按钮Button都是一个控件)弹出的菜单为上下文菜单,创建一个上下文菜单分为下面几个步骤:
1、覆写onCreateContextMenu方法,生成对应的菜单子选项。
2、覆写onContextItemSelected方法,生成对应子选项的响应事件。
3、为一个控件注册上下文菜单。
下面看一个小例子:
1、在MainActivity的xml文件中添加一个TextView控件,ID为myTextV:

id="@+id/myTextV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

2、在MainActivity编写相应代码:

package com.yangzi.contextmenu;

import android.os.Bundle;
import android.app.Activity;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.TextView;

public class MainActivity extends Activity {

    // 声明菜单子选项ID号
    private static final int ITEM1 = Menu.FIRST;
    private static final int ITEM2 = ITEM1 + 1;
    private static final int ITEM3 = ITEM1+2;
    //声明TextView控件
    private TextView myTextV;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到文本显示控件
        myTextV = (TextView)findViewById(R.id.myTextV);
        //为该文本控件注册上下文菜单
        registerForContextMenu(myTextV);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    /*
     * 覆写onCreateContextMenu方法,建立上下午菜单
     * 
     * */
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        /*
         * add方法的参数说明:
          * 参数一:group ID(int) :组ID,用于标示该子选项属于哪一个组
         * 参数二:item ID(int) :子选项ID,用于标示该子选项
         * 参数三:order ID(int): 显示顺序,用于标示该子选项显示顺序,默认为0,表示按添加顺序显示
         * 参数四:title (String): 用于定义该子选项的显示文字
         * 
         * */
        menu.add(0,ITEM1,0,"背景红色");
        menu.add(0,ITEM2,0,"背景黄色");
        menu.add(0,ITEM3,0,"背景蓝色");
    }
    /*
     * 覆写该方法,添加相应的菜单相应事件
     * 
     * */
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        /*
         * 根据选择的子选项(通过item ID来区分),进行不同的响应
         * 
         * 这里使用的颜色资源要在res/values文件夹内的color.xml文件中声明
         * 
         * */
        switch (item.getItemId()) {
        case ITEM1:
            //设置文本显示控件的背景
            myTextV.setBackgroundColor(getResources().getColor(R.color.red));
            break;
        case ITEM2:
            myTextV.setBackgroundColor(getResources().getColor(R.color.yellow));
            break;
        case ITEM3:
            myTextV.setBackgroundColor(getResources().getColor(R.color.white));
            break;
        default:
            break;
        }
        return true;
    }
}

自己动手试试,观察效果吧!

你可能感兴趣的:(Android开发系列)