【问题标题】:Android Long Press on Edit Text behaviorAndroid 长按编辑文本行为
【发布时间】:2010-11-15 04:06:13
【问题描述】:

是否可以在用户长按任何编辑文本时显示的项目列表中添加一些内容? (剪切、复制粘贴、选择文本、全选、输入法)我想为此添加一个选项,该选项将扫描二维码并将结果粘贴到编辑文本中。我认为从我放入自己的应用程序的编辑文本中得到这种行为并不难,但我想将此选项添加到手机上任何应用程序内的任何编辑文本中。这样的事情可能吗,如果可以的话,有人能指出我正确的方向吗?

Edit 150 bounty:我希望在长按 EditText 弹出对话框时添加一个项目。我想寻找一种方法来在整个系统范围内进行这种更改,而不仅仅是在一个应用程序的上下文中。

【问题讨论】:

  • 您有没有发现如何在整个系统范围内执行此操作?我正试图弄清楚如何做到这一点,但收效甚微。
  • 不,从来没有遇到过。我的最佳想法是创建一个键盘替换应用程序,上面可以有一个扫描按钮。

标签: android input android-edittext


【解决方案1】:

这是不可能的,因为上下文菜单是由应用程序本身而非系统填充的。您不能强制其他应用程序拥有在其生命周期中可能不会使用的上下文项。您至少可以在知道您的应用程序的应用程序中拥有该功能。

创建一个仅填充和处理全局菜单项的活动。其他应用程序可以通过扩展您的活动来使用该功能。但这也会产生问题,因为其他应用程序将严重依赖您的应用程序。因此,如果您的应用程序未安装在该系统中,那么其他应用程序将无法运行。此外,如果您的应用尚未安装,也无法在清单文件中指示此依赖关系,因此依赖的应用会隐藏在市场中。

我确定这不是您正在寻找的答案为,但上下文菜单是设计使然。

【讨论】:

    【解决方案2】:

    有两种方法:第一种由 Shahab 描述。第二个更简单。您只需覆盖活动的标准方法,例如:

    @Override
    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo)
    {
           if(view.getId()==R.id.MyEditTextId)
           {
                menu.add(Menu.NONE, MyMenu, Menu.NONE, R.string.MyMenuText);
           }
           else
              super.onCreateContextMenu(menu, view, menuInfo);
    }
    

    之后,您将拥有长按弹出上下文菜单

    【讨论】:

    • 我认为这更接近我想要的。但我不希望在我的一个应用程序中完成这项工作。每当我长按任何应用程序中的任何编辑文本时,我都希望它是系统范围的,我想在弹出的菜单中添加一个选项。是否有可能在整个系统范围内做类似的事情?
    • 这是不可能的,因为上下文菜单是由应用程序本身而非系统填充的。您不能强制其他应用程序拥有他们可能不需要的上下文项。您至少可以在知道您的应用程序的应用程序中拥有该功能。创建一个包含填充菜单项的活动的库。其他应用可以通过扩展您的活动来使用该功能。
    • @userSeven7s:我会争辩。如果您将有一个根 Activity,它是所有应用程序 Activity 的父级 - 您可以按照我上面描述的方式覆盖 onCreatContextMenu - 所以每当用户长按时都会出现上下文菜单,嗯?
    • @barmaley:抱歉,评论是对 Tim 的回复。我现在知道我应该在评论之前添加“@Tim”。我还添加了 cmment 作为答案。这证明它不是你的答案。你的回答没有错。它适用于单个应用程序中的上下文菜单。
    【解决方案3】:

    是的,可以在 EditText 的 LongClick 上的项目列表中添加一些内容。

    为了让你找到正确的方向,我发布了一些代码 sn-ps。

    在 main.xml 中做类似的事情

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
    >
    
    <EditText  
                  android:id="@+id/textt"
                  android:layout_width="fill_parent" 
                  android:layout_height="wrap_content" 
                  android:text="@string/hello"
    />
    
    </LinearLayout>
    

    在你的主活动中,做类似的事情

    public class edit extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        EditText text = (EditText)this.findViewById(R.id.textt);
        text.setOnLongClickListener(new OnLongClickListener() {
    
            @Override
            public boolean onLongClick(View v) {
    
                //ADD HERE ABOUT CUT COPY PASTE  
                // TODO Auto-generated method stub
                return false;
            }
        });
    }
    }
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2016-11-13
      • 2011-03-17
      • 2018-01-09
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多