【问题标题】:Android add item to global context menuAndroid将项目添加到全局上下文菜单
【发布时间】:2010-10-08 05:56:13
【问题描述】:

当您在 Android 中长按某个内容时,会出现一个上下文菜单。我想为系统中的所有TextViews 在此上下文菜单中添加一些内容。

例如,系统通过复制和粘贴来执行此操作。我想添加我自己的,并让它出现在每个应用程序中。

【问题讨论】:

标签: java android menu contextmenu


【解决方案1】:

目前 Android 不支持此功能,如果特定 Activity 未实现您公开的 Intent 或 Activity,则您无法在系统级别全局覆盖或挂钩功能。即使在发布意图的情况下,除非运行的应用程序是消费者,否则所有基本系统应用程序以及显然在您之前的所有应用程序都不会在不更新应用程序的情况下使用。

基本上,这是不可能的。

您究竟想通过这个全局上下文菜单来完成什么,某种在您的应用程序中运行的全局“搜索”或“发送至”功能?

【讨论】:

  • 谢谢。我正在尝试制作一个可以翻译任何 TextView 的翻译应用程序 - 你会长按,选择翻译,选择语言,它会出现在 textview 中。我可以看到它在其他地方也很有用。呃,好吧。谢谢,艾萨克·沃勒isaacwaller.com
  • 哦,那太好了..您应该为此发布一个意图,以便人们可以订阅,如果它可用,我可能会使用它,我的应用程序仅供参考。祝你好运!
  • 有可能,只是不漂亮:-\
【解决方案2】:

在您的文件 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

他在ru.stackoverflow.com上回答

【讨论】:

    【解决方案3】:

    这可能有点麻烦,但是您可以在应用程序/活动级别捕获菜单键,检查您当前的活动视图是否是文本输入视图,然后构建并显示您自己的自定义弹出菜单。

    有可能,只是有点棘手。

    如果你创建/膨胀一个 TextView,在它上面调用 setFocusable(false),然后将它设置为活动视图,你的 Activity 仍然会收到关键事件。 您必须手动将所有这些事件(轨迹球、触摸、按键)转发到您的视图树。 (在您的“onKeyDown”函数中,您必须为顶级视图调用适当的“onKeyDown”方法)您必须有效地捕捉“焦点”的概念并自己将其分配给正确的视图。

    虽然有点难看,但它可能会给你想要的结果。

    但是,这仅适用于您自己的应用程序。以前的答案是正确的,这在整个手机上是不可能的。

    【讨论】:

    • 这对您尚未构建的应用程序有何影响?如果您打开浏览器并选择导航文本视图,更不用说此时您的活动已经消失了..您将如何附加和接收事件?
    【解决方案4】:

    在选择菜单中按下共享按钮(三点树)。然后你应该选择你自己的应用程序。不幸的是,不适用于输入字段内容。

    【讨论】:

      【解决方案5】:

      嗯;我不知道您是否可以像示例中那样扩展内置类型。 Ruby(我的Java知识还不够深)。

      但是,您可以从 TextView 派生出您自己的 MyTextView。然后将所有 TextView 替换为如下布局:

      <TextView android:id="@+id/TextView01" />
      

      <com.mydomain.mypackage.MyTextView android:id="@+id/TextView01" />
      

      自动更改所有这些字段的类型。

      然后你需要重写所有的构造函数 (尤其是TextView(Context context, AttributeSet attrs))。

      之后,所有布局充气器(自动或手动)都会毫不费力地创建这种类型。

      然后您可以根据需要创建/注册上下文菜单回调。

      【讨论】:

      • 这仅适用于他的应用程序/布局中的 TextViews。他想为所有应用程序添加一些东西,包括那些他没有作者身份的应用程序。除非 TextView 使用一些内部 Intent 来构建其操作列表,否则似乎无法进入其中。
      • 那不允许你例如。在其他应用程序中查看某人的密码?如果您可以使用上下文菜单附加到所有 TextView,也可以转储其内容...
      • 在 Android 中可以通过适当的权限查看某人的密码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多