android中的上下文菜单

本文介绍了一种在Android应用中实现上下文菜单的方法,重点讲解如何为TextView和EditText设置不同的上下文菜单,并演示了如何使用代码动态创建这些菜单及其响应事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值