效果如图所示:
步骤一:实现activity_context_menu.xml和item_context.xml
1.1.activity_context_menu.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ContextMenuActivity" android:orientation="vertical" android:gravity="center" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="上下文菜单" android:id="@+id/btn_menu" android:textColor="@color/black" android:textSize="20sp" /> <TextView android:id="@+id/tv_menu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:gravity="left|center" /> </LinearLayout>
1.2.item_context.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/item_time" android:title="改变时间" android:orderInCategory="1" > </item> <item android:id="@+id/item_color" android:title="改变颜色" android:orderInCategory="2" > </item> <item android:id="@+id/item_background" android:title="改变背景" android:orderInCategory="3" > </item> </menu>
步骤二:实现ContextMenuActivity,注释已经在代码中给出
package com.example.buttomtest; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.graphics.Color; import android.os.Bundle; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.example.buttomtest.util.DateUtil; public class ContextMenuActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_menu; private TextView tv_menu; //声明颜色数组 private int[] color={Color.BLACK,Color.WHITE,Color.YELLOW, Color.RED,Color.GREEN,Color.DKGRAY, Color.CYAN, Color.MAGENTA, Color.GRAY, Color.DKGRAY}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_context_menu); btn_menu=findViewById(R.id.btn_menu); tv_menu=findViewById(R.id.tv_menu); btn_menu.setOnClickListener(this); ctime(); } @Override public void onClick(View v) { if (v.getId()==R.id.btn_menu){ //1.给按钮btn_menu先注册上下文菜单 registerForContextMenu(v); //2.显示打开上下文菜单 openContextMenu(v); //3.注销上下文菜单 unregisterForContextMenu(v); } } //在页面恢复时调用 @Override protected void onResume() { //这个是给文本视图注册上下文菜单,只要长按文本视图也可以显示上下文菜单 registerForContextMenu(tv_menu); super.onResume(); } //给文本视图注销上下文菜单 @Override protected void onPause() { unregisterForContextMenu(tv_menu); super.onPause(); } //在上下文菜单界面创建时调用 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { getMenuInflater().inflate(R.menu.item_context,menu); } @Override public boolean onContextItemSelected(@NonNull MenuItem item) { //获取菜单项的编号 int id = item.getItemId(); if (id == R.id.item_time){ //改变时间 ctime(); }else if (id == R.id.item_color){ //改变字体颜色 tv_menu.setTextColor(changeBackground()); }else if (id == R.id.item_background){ //改变背景 tv_menu.setBackgroundColor(changeBackground()); } return super.onContextItemSelected(item); } //获取随机的颜色值 private int changeBackground() { /** *Math是数学类,random()是Math类中的一个方法,random本身只产生(0~1)之间的小数, *random()*10 意思是产生0~10之间的小数 ,int(random()*10)的意思是强制取整,把小数部分去掉只去整数部分, * 所以 就变成了 产生0~9之间的整数。 */ int random = (int) (Math.random() * 10 % 10); return color[random]; } private void ctime() { tv_menu.setText(DateUtil.getNowDateTime("yyyy-MM-dd HH:mm:ss")+"这是菜单显示文本"); } }
以上就是上下文菜单的基本用法,如果不足,还望各位加以指正~