当您在 Android 中长按某些内容时,会出现一个上下文菜单。我想为TextViews
系统中的所有人在此上下文菜单中添加一些内容。
例如,系统使用复制和粘贴来执行此操作。我想添加我自己的,并让它出现在每个应用程序中。
当您在 Android 中长按某些内容时,会出现一个上下文菜单。我想为TextViews
系统中的所有人在此上下文菜单中添加一些内容。
例如,系统使用复制和粘贴来执行此操作。我想添加我自己的,并让它出现在每个应用程序中。
目前 Android 不支持这一点,如果没有特定活动实现您公开的意图或活动,则无法在系统级别全局覆盖或挂钩功能。即使在发布意图的情况下,除非运行的应用程序是消费者,否则所有基本系统应用程序以及显然在您之前的所有应用程序都不会在不更新应用程序的情况下使用。
基本上就目前而言,这是不可能的。
你到底想用这个全局上下文菜单来完成什么,某种在你的应用程序中运行的全局“搜索”或“发送到”功能?
在您的文件 android-manifest.xml 中添加意图过滤器:
<activity
android:name=".ProcessTextActivity"
android:label="@string/process_text_action_name">
<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>
在方法 onCreate() 中通过活动中的用户文本突出显示您的应用程序:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.process_text_main);
CharSequence text = getIntent()
.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT);
// process the text
}
更多信息请参阅有关medium的文章。
感谢用户:YungBlade
唔; 我不知道您是否可以像示例中那样扩展内置类型。Ruby(我的 Java 知识还不够深)。
但是,您可以从 TextView 派生出您自己的 MyTextView。然后将所有 TextView 替换为如下布局:
<TextView android:id="@+id/TextView01" />
到
<com.mydomain.mypackage.MyTextView android:id="@+id/TextView01" />
自动更改所有这些字段的类型。
然后你需要覆盖所有的构造函数(尤其是TextView(Context context, AttributeSet attrs)
)。
之后,所有布局充气机(自动或手动)都会毫不费力地创建这种类型。
然后,您可以根据需要创建/注册上下文菜单回调。
这可能有点麻烦,但是您可以在应用程序/活动级别捕获菜单键,检查您当前的活动视图是否是文本输入视图,然后构建并显示您自己的自定义弹出菜单。
这是可能的,只是有点棘手。
如果您创建/膨胀一个 TextView,对其调用 setFocusable(false),然后将其设置为活动视图,您的Activity仍将接收关键事件。您必须手动将所有这些事件(轨迹球、触摸、按键)转发到您的视图树。(在您的“onKeyDown”函数中,您必须为顶级视图调用适当的“onKeyDown”方法)您必须有效地捕捉“焦点”的概念并自己将其分配给正确的视图。
虽然有点难看,但它可能会给你想要的结果。
但是,这仅适用于您自己的应用程序。以前的答案是正确的,因为在整个手机上是不可能的。
按下选择菜单中的共享按钮(三点树)。然后你应该选择你自己的应用程序。不幸的是,不适用于输入字段内容。