Android 中实现上下文菜单(Context menu)详解

简介: 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")+"这是菜单显示文本");
    }
}

以上就是上下文菜单的基本用法,如果不足,还望各位加以指正~


目录
相关文章
|
8月前
|
Android开发
Android 中选项菜单(Option menu)的用法
Android 中选项菜单(Option menu)的用法
82 0
|
9月前
|
XML Android开发 数据格式
Android 彩色上下文菜单 Context
Android 彩色上下文菜单 Context
|
11月前
|
XML Android开发 数据格式
Android 底部导航栏(一、BottomNavigationView+Menu+Fragment)
现在常用的App主页都会有一个底部导航栏,根据需求也使用过好几种方法进行实现,于是想着还是总结一下,今天还写一个简单的BottomNavigationView方法来实现这个功能
|
11月前
|
XML Java 数据格式
Android_三种常用Menu菜单(附源码)
记录一下我写菜单的代码,我写了一共有三种菜单,从常用到不常用。
134 0
|
API Android开发 对象存储
Android | 使用 ContentProvider 无侵入获取 Context
Android | 使用 ContentProvider 无侵入获取 Context
348 0
Android | 使用 ContentProvider 无侵入获取 Context
|
XML 数据可视化 API
安卓 topic-菜单 Menu
http://developer.android.youdaxue.com/guide/topics/ui/menus.html 菜单是许多应用类型中常见的用户界面组件。要提供熟悉而一致的用户体验,您应使用 Menu API 呈现 Activity 中的用户操作和其他选项。 从 Android 3.0(API 级别 11)开始,采用 Android 技术的设备不必再提供一个专用“菜单”按钮。随着这种改变,Android 应用需摆脱对包含 6 个项目的传统菜单面板的依赖,取而代之的是要提供一个应用栏来呈现常见的用户操作。 尽管某些菜单项的设计和用户体验已发生改变,但定义一系列操作和选项所使用的语
112 0
安卓 topic-菜单 Menu
|
6天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
28天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0
|
3天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。