[英]Android add item to global context menu
当您在Android中长按某些内容时,会出现一个上下文菜单。 我想为系统中所有TextViews
上下文菜单添加一些内容。
例如,系统使用“复制”和“粘贴”执行此操作。 我想添加自己的,并让它出现在每个应用程序中。
目前Android不支持此功能,如果没有特定活动实现您公开的意图或活动,则无法在系统级别全局覆盖或挂钩功能。 即使在发布意图的情况下,除非运行的应用程序是消费者,否则无关紧要......并且所有基本系统应用程序以及显然所有应用程序之前的应用程序都不会没有更新要使用的应用程序。
基本上看来,这是不可能的。
您正在尝试使用此全局上下文菜单,某种通过您的应用程序运行的某种全局“搜索”或“发送到”功能来完成什么?
在选择菜单中按“共享”按钮(三个点的树)。 然后你应该选择自己的应用程序。 遗憾的是,它不适用于输入字段内容。
在文件android-manifest.xml中添加intent-filter:
<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
}
感谢用户: YungBlade
嗯; 我不知道你是否可以扩展内置类型,例如。 Ruby(我的Java知识不是那么大)。
但是,您可以从TextView派生自己的MyTextView。 然后在布局中替换所有TextView,如下所示:
<TextView android:id="@+id/TextView01" />
至
<com.mydomain.mypackage.MyTextView android:id="@+id/TextView01" />
自动更改所有这些字段的类型。
然后,您需要覆盖所有构造函数(尤其是TextView(Context context, AttributeSet attrs)
)。
之后,所有布局的inflaters(自动或手动)将创建这种类型,没有大惊小怪。
然后,您可以根据需要创建/注册上下文菜单回调。
这可能有点hacky,但您可以在应用程序/活动级别捕获菜单键,检查当前活动视图是否是文本输入视图,然后构建并显示您自己的自定义弹出菜单。
有可能,这有点棘手。
如果您创建/膨胀TextView,请在其上调用setFocusable(false),然后将其设置为活动视图,您的Activity仍将接收关键事件。 您必须手动将所有这些事件(轨迹球,触摸,键)转发到您的View树。 (在你的“onKeyDown”函数中,你必须为顶级视图调用适当的“onKeyDown”方法)你有效地必须捕获“焦点”的概念并将其自己发送到正确的视图。
虽然有点难看,它可能会给你想要的结果。
但是,这只适用于您自己的应用程序。 以前的答案是正确的,在整个手机上是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.