Android 中实现上下文菜单(Context menu)详解
Posted 路宇_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 中实现上下文菜单(Context menu)详解相关的知识,希望对你有一定的参考价值。
效果如图所示:
步骤一:实现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")+"这是菜单显示文本");
}
}
以上就是上下文菜单的基本用法,如果不足,还望各位加以指正~
以上是关于Android 中实现上下文菜单(Context menu)详解的主要内容,如果未能解决你的问题,请参考以下文章
Android学习笔记——创建一个简单的上下文菜单ContextMenu