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>

更多相关文章

  1. Android(安卓)studio 弹出式菜单和上下文菜单
  2. android中添加级联更新的下拉菜单
  3. Android保持屏幕常亮,PowerManager.WakeLock的使用
  4. android 菜单事件处理
  5. Android分享功能
  6. android(6) 扇形菜单实现
  7. Android(安卓)ontouch 手速
  8. android 设置Button或者ImageButton的背景透明
  9. Android(安卓)Adapter

随机推荐

  1. Android学习资源
  2. 阿里巴巴Android开发手册
  3. Android模拟器AVD的路径设置及界面介绍
  4. Mysql数据库的QPS和TPS的意义和计算方法
  5. mysql数据库太大了如何备份与还原
  6. MySQL开启慢查询日志功能的方法
  7. 开发人员为什么必须要了解数据库锁详解
  8. mysql最大连接数设置技巧总结
  9. 一次神奇的MySQL死锁排查记录
  10. MySQL关于sql_mode解析与设置讲解