android中的上下文菜单

package hq.example.menu;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
/**
* 上下文菜单,长按的时候出现的菜单,我们可以理解为就是上下文菜单
* 要求:对TextView和 EditText设置不同的上下文菜单,其中EditText的上下文菜单是可以有单选按钮
*
*/
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
*1    菜单的上下文:第一步是,获得该view,通过id
* 其中要把值两个视图,注册为上下文菜单
*/
TextView edit1=(TextView)this.findViewById(R.id.edit1);
//EditText 默认就有一个上下文菜单,在android2.2的版本中
EditText edit2=(EditText)this.findViewById(R.id.edit2);
//对上下文图标进行注册
this.registerForContextMenu(edit1);
this.registerForContextMenu(edit2);

}


//2   第二步,就是重写onCreateContextMenu,创建一个上下文菜单;参数:menu表示的是,上下文菜单,v 表示的是视图,menInfo表示的是,菜单信息
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
/**
*  创建上下文菜单布局有两种方法:
*  方法一:在menu文件下的context_menu.xml(如果没有此文件,可以新建.xml的文件)文件,进行menu布局
*  通过,this.getMenuInflater().inflate(R.menu.context_menu, menu)方法,就可以生成上下文菜单:表示的是
*  把R.menu.context_menu的资源文件,放到menu对象上,inflate表示是将资源文件转换成对象的类说
*  //创建一个LayoutInflater的对象
*  LayoutInflater flater=this.getLayoutInflater();
*  /此方法,将布局文件(布局文件中所有的资源)转成视图对象
flater.inflate(父容器对象);如果没有就null
*  方法二:动态的创建上下文菜单
*/

//方法一:xml进行布局
//this.getMenuInflater().inflate(R.menu.context_menu, menu);
//方法二:动态的
//表示的是设置上下文的头标题:
menu.setHeaderTitle("我是上下文菜单的头标题");
//图标题,可以设置其图标:可以自己定义图片,也可以在android中找
menu.setHeaderIcon(android.R.drawable.ic_dialog_map);
//设置图标题的图标
//menu.setHeaderView(arg0);
//
int id=v.getId();
//对不同的视图(View),添加不同的上下文菜单
switch (id) {
case R.id.edit1:
//对视图的id为edit1(文本框),添加上下文菜单
//第一个参数,表示是分组的id,第二个参数是menu自己的id,第三个参数表示的是子菜单是排序的顺序
menu.add(1, 1, 1, "菜单1");
menu.add(1, 2, 2, "菜单2");
break;

case R.id.edit2:
/**
* 对视图id的edit2(编辑框),添加一个不同的上下文菜单:
* 其中setCkeckable(true)表示是,变成一个可选择的菜单,多选择,默认的是不选中的,
* setChecked(true)表示是默认的是选中的;
* menu.setGroupCheckable(2, true, true):表示的是按照分组为2的id,对菜单的设置单项按钮选择.
*  第一个true表示电话是否分组选择,第二true表示是是否可选择
*/
menu.add(2,3,3,"菜单3").setCheckable(true);
//genderMenu.setGroupCheckable(GENDER_GROUP, true, true);
menu.add(2,4,4,"菜单4").setChecked(true);
//设置单项选择按钮,其中如果要选择,就要进行事件的触发
menu.setGroupCheckable(2, true, true);
break;
}
super.onCreateContextMenu(menu, v, menuInfo);
}
//3   第三步:上下文的触发事件,就是单,上下文菜单选中时,就不调用此方法
@Override
public boolean onContextItemSelected(MenuItem item) {
//得到上下文菜单的id
int id=item.getItemId();
switch(id){
case 2:
//单点击menu的id为二时,就跳出一个对话框
Toast.makeText(MainActivity.this, "我要设置跳出一个对话框",Toast.LENGTH_SHORT).show();
//如果要创建一个对话框,那就要创建一个对话框的工程 AlertDialog.Builder bu=new AlertDialog.Builder(this);
AlertDialog.Builder alert=new AlertDialog.Builder(this);
alert.setTitle("我是对话框标题");
alert.setMessage("我是设置提示内容的");

//如果要在提示中添加按钮?添加按钮(对话框中最多只能添加三个按钮),就要添加事件,其中,添加对话框的按钮事件时,要记得导入包时要是import android.content.DialogInterface.OnClickListener;
//创建监听器
OnClickListener listener=new OnClickListener() {

@Override
public void onClick(DialogInterface arg0, int arg1) {
Toast.makeText(MainActivity.this, "对话框按钮被点击了!!", Toast.LENGTH_SHORT).show();

}
};
alert.setPositiveButton("确认按钮", listener);
alert.setNegativeButton("取消按钮",listener);
alert.setNeutralButton("忽略按钮", listener);

//显示提示框
alert.show();

case 3:
//如果menu中的id为4的菜单,被选中了
Toast.makeText(MainActivity.this, "我上上下文菜单,点击了我:"+id, Toast.LENGTH_SHORT).show();
item.setChecked(true);
break;
case 4:
//
Toast.makeText(MainActivity.this, "我上上下文菜单,点击了我:"+id, Toast.LENGTH_SHORT).show();
item.setChecked(true);
break;

}
return true;
}
}
//context_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <!-- 单选按钮组 -->
            <group android:id="@+id/r"
               
                 android:checkableBehavior="single"> 
               <item android:title="子菜单1"
                   android:orderInCategory="1"
                   android:id="@+id/it" 
                   /> 
              <item android:title="子菜单2"/> 
              <item android:title="子菜单3"/>
         </group> 
   
   
</menu>

你可能感兴趣的:(android)