一、onCreateContextMenu
1.可以在activity或者Fragment里面,通过注册registerForContextMenu(view),其中view可以是Button或者TextView等。
registerForContextMenu(btn);//btn是要点击的控件
2.在res文件下创建menu文件夹,然后再menu文件夹下创建一个xml文件
3.需要重写onCreateContextMenu方法和onContextItemSelected方法
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.menu,menu);
//给menu设置布局文件,当触发时显示在界面上
}
@Override
public boolean onContextItemSelected(MenuItem item) {
//布局文件里面对应的id,当点击时,根据id区别那个被点击
switch (item.getItemId()){
case R.id.text1:
Log.i("GUIYU","text1");
break;
case R.id.text2:
Log.i("GUIYU","text2");
break;
case R.id.text3:
Log.i("GUIYU","text3");
break;
}
return super.onOptionsItemSelected(item);
}
4.触发条件有两种,第一:调用方法 view.showContextMenu(), 第二种:长按(可以和长按事件setOnLongClickListener同时触发)。
//调用方法方式
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.showContextMenu();//单击直接显示Context菜单
}
});
5.主要代码
(1)menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/text1" android:title="测试一"/>
<item android:id="@+id/text2" android:title="测试二"/>
<item android:id="@+id/text3" android:title="测试三"/>
</menu>
(2)MainActivity.java
package com.tencent.menu;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (TextView) findViewById(R.id.btn);
registerForContextMenu(btn);//控件注册
btn.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.i("GUIYU","长按事件");
//长按时 会同时触发ContextMenu和长按事件
return false;
}
});
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.showContextMenu();//单击直接显示Context菜单
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.menu,menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()){//根据id区分不同的点击事件
case R.id.text1:
Log.i("GUIYU","text1");
break;
case R.id.text2:
Log.i("GUIYU","text2");
break;
case R.id.text3:
Log.i("GUIYU","text3");
break;
}
return super.onOptionsItemSelected(item);
}
}
运行效果–