当你在 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
}
有关medium的文章中的更多信息。
感谢用户:YungBlade
这可能有点 hacky,但您可以在应用程序/活动级别捕获菜单键,检查您当前的活动视图是否是文本输入视图,然后构建并显示您自己的自定义弹出菜单。
有可能,只是有点棘手。
如果您创建/扩充一个 TextView,对其调用 setFocusable(false),然后将其设置为活动视图,您的 Activity 仍将接收按键事件。 您将必须手动将所有这些事件(轨迹球、触摸、按键)转发到您的视图树。 (在你的“onKeyDown”函数中,你必须为顶级视图调用适当的“onKeyDown”方法)你必须有效地捕捉“焦点”的概念并自己将其分配给正确的视图。
虽然有点难看,但它可能会给你想要的结果。
但是,这仅适用于您自己的应用程序。以前的答案是正确的,因为它不可能在整个手机上。
在选择菜单中按下共享按钮(三点树)。然后你应该选择你自己的应用程序。不幸的是,不适用于输入字段内容。
嗯;我不知道您是否可以像示例中那样扩展内置类型。 Ruby(我的 Java 知识还不够深)
但是你可以从 TextView 派生你自己的 MyTextView。然后将所有 TextView 替换为这样的布局:
<TextView android:id="@+id/TextView01" />
到
<com.mydomain.mypackage.MyTextView android:id="@+id/TextView01" />
自动更改所有这些字段的类型。
然后你需要覆盖所有的构造函数 (特别是
TextView(Context context, AttributeSet attrs)
)。
之后所有布局充气器(自动或手动)将毫不费力地创建这种类型。
然后您可以根据需要创建/注册上下文菜单回调。