Android开发

增加系统TextView长按菜单

2021-12-03  本文已影响0人  卓技卓品

今天介绍一下在Android6.0+版本上新增的一个新特性:通过Text Selection实现系统中应用EditText、TextView的文本选择菜单和提供文本处理功能。参考:Android 6.0 Marshmallow

首先创建接收复制数据的Activity,我命名为ReceiveProcessTextActivity。进入清单文件AndroidManifest.xml对应ReceiveProcessTextActivity中声明intent-filter:

<activity
    android:enabled="false"
    android:name=".activity.ReceiveProcessTextActivity"
    android:label="@string/app_name"
    android:exported="true" >
    <intent-filter>
        <action android:name="android.intent.action.PROCESS_TEXT" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

此时长按系统的TextView、EditText数据,选中数据后,弹出的菜单中会显示新增的菜单项。 现在实现获取选中的数据。 我们找到ReceiveProcessTextActivity文件,在onCreate方法中添加以下代码:

CharSequence charSequenceExtra = getIntent().getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT);
boolean readonly = getIntent().getBooleanExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, false);
if (charSequenceExtra != null) {
  TextView tvReceiveProcess = findViewById(R.id.tv_receive_process_text);
  tvReceiveProcess.setText(charSequenceExtra);
}

此时获取的charSequenceExtra数据即为选中的数据。 我们看一下android.intent.action.PROCESS_TEXT描述:

Activity Action: Process a piece of text.
Input: EXTRA_PROCESS_TEXT contains the text to be processed. EXTRA_PROCESS_TEXT_READONLY states if the resulting text will be read-only.
Output: EXTRA_PROCESS_TEXT contains the processed text.

翻译为:

Activity操作:处理一段文本。
输入:EXTRA_PROCESS_TEXT包含要处理的文本。EXTRA_PROCESS_TEXT_READONLY表示生成的文本是否为只读。
输出:EXTRA_PROCESS_TEXT包含已处理的文本结果。

根据文档,我们可以返回处理完成的数据,方式如下:

Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_PROCESS_TEXT, "这是替换的文字");
setResult(RESULT_OK, intent);

注意,该方式仅对系统控件有效,部分应用自定义了TextView、EditView,无法实现菜单添加和数据处理,比如微信。 实现效果如下:


PROCESS_TEXT.gif

参考项目:睡眠助手

上一篇 下一篇

猜你喜欢

热点阅读