效果如圖所示:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNiZpdmL0EjN2QDO0ITM3EjNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
步驟一:實作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")+"這是菜單顯示文本");
}
}
以上就是上下文菜單的基本用法,如果不足,還望各位加以指正~