Android(安卓)彩色上下文菜单 Context
本文原创首发CSDN,链接 https://blog.csdn.net/qq_41464123/article/details/106954710 ,作者博客https://blog.csdn.net/qq_41464123 ,转载请带上本链接,尤其是脚本之家、码神岛等平台,谢谢配合。
目录
零:需求分析
一:功能实现
二:总结
零:需求分析
什么是Android进程上下文?
- 它是应用程序环境的全局信息的接口。
- 这是一个抽象类,由Android系统提供。
- 它允许访问特定于应用程序的资源和类,以及调用应用程序级操作,如启动活动,广播和接收意图等。
如果有这样一个需求,客户要求将Android中的“进程上下文”字体修改为某种颜色,你该如何去实现?
效果如下:
一:功能实现
当用户长按组件时,弹出的菜单就是上下文菜单。
使用菜单资源创建上下文菜单的具体步骤如下:
(0)在XML文件中添加一个TextView,id为tv。
(1)在 MainActivity 的 onCreate 方法中注册上下文菜单。
比如我在这里用文本框注册上下文菜单,使用以下代码,也就是在长按该文本框的时候,才显示上下文菜单。
TextView textView1 = findViewById(R.id.tv); registerForContextMenu(textView1);
(2)设计Menu 菜单项,放在res / menu 目录下。
<?xml version="1.0" encoding="utf-8"?>
(3)重写 MainActivity 中 onCreateContextMenu 方法。
在该方法中,首先继承父类的 onCreateContextMenu 方法,然后调用 inflate() 方法解析一个菜单资源文件,并把解析后的菜单保存在menu中,关键代码如下所示:
@Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo){ super.onCreateContextMenu(menu,view,menuInfo); getMenuInflater().inflate(R.menu.menu, menu); }
(4)给上下文菜单的文字添加颜色,但是Menu菜单项并没有直接添加颜色的方法。
我们需要先把文字取出来,作为 SpannableString 保存,然后在给文字添加颜色属性后,在set回去。
关键代码如下:
MenuItem item1 = menu.findItem(R.id.m01);SpannableString spannableString1 = new SpannableString(item1.getTitle());spannableString1.setSpan(new ForegroundColorSpan(Color.RED), 0, spannableString1.length(), 0);item1.setTitle(spannableString1);
其中R.id.m01,是menu.xml文件中的菜单项ID。
item1.getTitle()指的是把菜单的文字取出来
Color.RED,也可以使用Color.rgb(255,0,0)这样的RGB格式来替换。
(5)完整代码。
import android.graphics.Color;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.SpannableString;import android.text.style.ForegroundColorSpan;import android.view.ContextMenu;import android.view.MenuItem;import android.view.View;import android.widget.TextView;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView1 = findViewById(R.id.tv); registerForContextMenu(textView1); } @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo){ super.onCreateContextMenu(menu,view,menuInfo); getMenuInflater().inflate(R.menu.menu, menu); MenuItem item1 = menu.findItem(R.id.m01); SpannableString spannableString1 = new SpannableString(item1.getTitle()); spannableString1.setSpan(new ForegroundColorSpan(Color.RED), 0, spannableString1.length(), 0); item1.setTitle(spannableString1); MenuItem item2 = menu.findItem(R.id.m02); SpannableString spannableString2 = new SpannableString(item2.getTitle()); spannableString2.setSpan(new ForegroundColorSpan(Color.MAGENTA), 0, spannableString2.length(), 0); item2.setTitle(spannableString2); MenuItem item3 = menu.findItem(R.id.m03); SpannableString spannableString3 = new SpannableString(item3.getTitle()); spannableString3.setSpan(new ForegroundColorSpan(Color.YELLOW), 0, spannableString3.length(), 0); item3.setTitle(spannableString3); MenuItem item4 = menu.findItem(R.id.m04); SpannableString spannableString4 = new SpannableString(item4.getTitle()); spannableString4.setSpan(new ForegroundColorSpan(Color.GREEN), 0, spannableString4.length(), 0); item4.setTitle(spannableString4); MenuItem item5 = menu.findItem(R.id.m05); SpannableString spannableString5 = new SpannableString(item5.getTitle()); spannableString5.setSpan(new ForegroundColorSpan(Color.LTGRAY), 0, spannableString5.length(), 0); item5.setTitle(spannableString5); MenuItem item6 = menu.findItem(R.id.m06); SpannableString spannableString6 = new SpannableString(item6.getTitle()); spannableString6.setSpan(new ForegroundColorSpan(Color.BLUE), 0, spannableString6.length(), 0); item6.setTitle(spannableString6); }}
二:总结
彩色上下文菜单是我Android期末考试的一道基础题,我认为很有必要记录总结一下,这个不仅仅可以在上下文菜单中使用,也可以在Toast弹框消息中套用,能套用的还有很多很多~~
更多相关文章
- Android应用开发学习笔记之菜单
- Android(安卓)内核安全机制-selinux简介
- Android(安卓)DrawerLayout demo(抽屉菜单)
- android,actionbar,menu显示,图片,菜单禁用★★★
- Android(安卓)SlidingMenu 使用详解
- Android(安卓)UI开发第二十七篇――实现左右划出菜单
- Android仿微信底部菜单
- Android(安卓)分页控件制成底部菜单
- Android实现高斯模糊(也叫毛玻璃效果)
随机推荐
- 多线程实现android更新进度条
- android View根据自己获取焦点的情况执行
- Type View requires API level 14 (curre
- Android(安卓)- Failure delivering resu
- android 生成圆角和带倒影图片
- In Android(安卓)how to display one vie
- android webview ZoomButtonsController
- com.android.support:appcompat-v7:15.+.
- Android(安卓)读写XML文件(使用pull解析)
- Android创建和删除桌面快捷方式