Android 6.0 设备上自定义文本操作栏

该篇文章主要讲解 Android 6.0 设备上自定义文本操作栏。

通过以下文章你会学习到以下几点。

  • 什么是 Android 设备上的文本操作栏
  • 如何在 Android 6.0 设备上为自己的 App 自定义文本操作

首先说说什么是 Android 设备上的文本操作栏。

文本操作栏

我们在平时使用手机的过程中,总是避免不了去操作一些文本,比如常见的复制、粘贴等功能。

一般我们只需要长按输入框内或者网页上的文本,系统即可弹出一个文本操作栏 ,上面会显示复制、粘贴、剪切等操作按钮 ,如下图所示。

<img src="http://upload-images.jianshu.io/upload_images/588640-fa2869c8f881efbb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" style="width:50%;"/>

这就是文本选择操作栏,但是一直以来,这个操作栏上面的按钮都是系统级别的,通过一般的方法是不能去自定义该操作栏上面的按钮的。

比如说,你做了一个翻译 App,为了更好的用户体验,你想让用户长按英文单词后,在这个系统文本操作栏上显示一个自定义的翻译按钮,然后用户点击这个按钮后,就可以直接查询网络释义,显示单词解释,那将是多么友好的用户体验。

但是这在 6.0 之前的 Android 设备上都是无法实现的,因为 Android 没有提供相关的 API 供开发者自定义文本操作按钮。

直到 Android 6.0,Android 开始支持在文本操作栏上自定义操作按钮 ,开发者可以根据自己 App 的需要,为自己的 App 自定义文本操作按钮。

这不,去年年初我发布了一款自己开发的软件 — 咕咚翻译,咕咚翻译是一个手机上用于划词翻译的开源 App,长按文本后选择复制操作,咕咚翻译即可 以悬浮窗的形式展示单词释义,如下所示。

demo

后来发布市场不久后,就有人在市场上建议我适配 6.0 的新 API 。

Paste_Image.png

当时还不知道 Android 6.0 已经可以支持自定义文本操作按钮,但是一经提示,我觉得这个 API 确实很适合咕咚翻译的应用场景。

之前的咕咚翻译,用户都是选择复制操作后,App 监听系统粘贴板然后进行查词,算是通过一种取巧的方式完成了划词翻译功能。但是如果使用自定义文本操作 Action,那么用户是使用时可能更加容易接受这样的操作。

所以后来便实现了自定义文本操作栏 Action。

自定义文本操作栏按钮

注意:以下操作只支持 Android 6.0 及以上设备

首先,既然自定义文本操作栏按钮,那么拿到用户选择的文本后,就需要一个可以处理文本的组件。这里 Android 定义使用一个 Activity 去完成这个处理操作。

注意,可能有人会想使用 Service 处理获取到的文本,这里 Android 对这个处理组件做了限制,只能使用 Activity。

创建处理文本的 Activity

这里我们给处理文本的 Activity 起名叫 ProcessTextActivity,接着创建Activity,比较简单。

Paste_Image.png

这里通过一个名为 Intent.EXTRA_PROCESS_TEXT 的 key 来获取用户选择的文本,可以看到获取文本很简单。拿到文本后,这边就可以对文本做操作了。

但是别忘了,Android 中每个使用到的 Activity 都需要注册,但是这个 Activity 的注册跟一般的 Activity 不一样。如下所示

注册自定义文本处理 Activity

Paste_Image.png

可以看到上面跟一般 Activity 注册不一样的地方就是 Intent Filter 的配置。这里的配置写法是固定的,表示这个 Activity 用于处理用户从文本操作栏点击自定义按钮后的操作。

然后自定义的文本选择操作就完成了。

至于拿到文本后怎么操作,那就看自己 App 的需求了。示例中的咕咚翻译是拿到文本后去请求公开的翻译 API 去翻译文本,然后以悬浮窗的形式显示出来,如下所示。

Paste_Image.png

当然,由于自定义文本操作栏按钮是 Android 6.0 设备上才有的 API ,所以 6.0 之前的设备上咕咚翻译还是采取了监听粘贴板来达到划词翻译的效果。

如果对源码感兴趣,因为咕咚翻译是一个开源 App ,你可以随意查看源码实现。链接如下

https://github.com/maoruibin/TranslateApp

可能还有一些细节文中没有提到,大家可以查看参考链接对应的一篇译文。

题外话

其实,在一些 App 中,当你长按文本后,会发现并没有弹出系统文本操作栏,如微信公众号中长按文本,弹出的就是一个跟系统完全不一样的文本操作栏,那如何自定义这样的文本操作框呢,如果感兴趣,推荐一篇文章,自定义选择复制功能的实现 (from 写代码的猴子)

参考链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,566评论 25 707
  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 46,415评论 22 663
  • 天空中已经看不到南迁的鸟儿了,取而代之的是时浓时淡的云。花儿们都收起了笑脸,不再呼朋引伴。一切都静了下来。 现在是...
    李查查的散文诗阅读 222评论 0 0
  • 目标 我儿子积极上进,身心健康,努力学习,考上理想的高中。 自己身心健康,不看无聊的网页,不看无意义的视频,不说无...
    7f207b2df6aa阅读 195评论 0 2
  • 下雨了,又想拿起笔涂画点东西,说说我最近的喜乐,写写心里的感觉。 2017年7月24日 星期一 雨 L城,今天下...
    九月的白七七阅读 296评论 0 1