Android中菜单栏的使用(上下文菜单)

本文详细介绍了如何在Android应用程序中实现上下文菜单功能,包括注册、创建和响应菜单项,以及在TextView上实现的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.简介

上下文菜单提供了许多操作,这些操作影响 UI 中的特定项目或上下文框架。使用步骤如下:

  1. 通过调用 registerForContextMenu(),注册应与上下文菜单关联的 View 。
registerForContextMenu(tv_test);
  1. 实现 onCreateContextMenu() 方法。
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
	super.onCreateContextMenu(menu, v, menuInfo);
	getMenuInflater().inflate(R.menu.menu_demo, menu);
}
  1. 实现 onContextItemSelected()方法。
public boolean onContextItemSelected(@NonNull MenuItem item) {
	int id = item.getItemId();
	if(id==R.id.menu_change_size) {
		tv_test.setTextSize(30);
	}
	if(id==R.id.menu_change_background) {
		tv_test.setBackgroundColor(0xFFFF0000);
	}
	return true;
}
  1. 不需要使用的时候调用unregisterForContextMenu()方法注销对应的UI组件注册。
unregisterForContextMenu(tv_test);

2.例子

下面是为一个TextView注册了上下文菜单的Activity。
例子图片

  1. menu_demo.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_change_size"
        android:orderInCategory="1"
        android:title="更换字体大小"/>
    <item android:title="更换背景"
        android:orderInCategory="2"
        android:id="@+id/menu_change_background"/>
</menu>
  1. activity_menu_demo.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=".MenuDemoActivity"
    android:orientation="vertical"
    android:padding="10dp">

    <TextView
        android:textColor="#000000"
        android:textSize="18sp"
        android:id="@+id/tv_test"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="今天也是要学习的一天"/>
</LinearLayout>
  1. MenuDemoActivity.java
package xyz.strasae.androidlearn.my;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class MenuDemoActivity extends AppCompatActivity {
    private TextView tv_test;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu_demo);
        tv_test = findViewById(R.id.tv_test);
        tv_test.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                openContextMenu(tv_test);
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        registerForContextMenu(tv_test);
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterForContextMenu(tv_test);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        getMenuInflater().inflate(R.menu.menu_demo, menu);
    }

    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        int id = item.getItemId();
        if(id==R.id.menu_change_size) {
            tv_test.setTextSize(30);
        }
        if(id==R.id.menu_change_background) {
            tv_test.setBackgroundColor(0xFFFF0000);
        }
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值