Android长按编辑文本的行为

8
有没有办法将扫描二维码并将结果粘贴到Edit Text的选项添加到用户长按任何Edit Text时显示的项目列表中?(剪切,复制,粘贴,选择文本,全选,输入法)我想要添加一个选项,可以扫描QR码并将结果粘贴到Edit Text中。我认为这不难从我放入自己应用程序中的Edit Texts中获得此行为,但我希望将此选项添加到手机上任何应用程序内部的任何Edit Text中。如果有这样的东西,是否有人能指点我正确的方向?
编辑150赏金:我要在长按EditText时添加一个项目到弹出对话框中。 我想要一种使此更改系统范围内生效的方法,而不仅仅是在1个应用程序的上下文中。

你最终找到了如何在整个系统中实现这个功能吗?我一直在尝试,但是进展甚微。 - Silvae
4
没错,我从未接触过这样的方法。我想到的最好的主意是创建一个键盘替换应用程序,它可以有一个扫描按钮。 - FoamyGuy
3个回答

8
这是不可能的,因为上下文菜单是由应用程序自己填充而不是由系统填充的。您不能强制其他应用程序具有它们在其生命周期中可能不使用的上下文项。您可以至少在了解您的应用程序的应用程序中拥有该功能。

创建一个仅填充和处理全局菜单项的活动。其他应用程序可以通过扩展您的活动来使用此功能。但这也会创建问题,因为其他应用程序将对您的应用程序有一个严格的依赖关系。因此,如果系统中未安装您的应用程序,则其他应用程序将无法工作。此外,没有办法在清单文件中指示此依赖关系,以便如果尚未安装您的应用程序,则相关应用程序在市场中将被隐藏。

我相信这不是您想要的答案,但上下文菜单是根据设计制作的。

6
有两种方法:第一种由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);
}

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

我认为这更接近我所寻找的内容。但我不想让它在我的应用程序中工作。我希望每当我长按任何应用程序中的任何编辑文本时,它都可以在系统范围内运行,并向弹出的菜单添加一个选项。是否可能在整个系统范围内执行此类操作? - FoamyGuy
这是不可能的,因为上下文菜单是由应用程序自己填充而不是系统填充的。你不能强制其他应用程序具有它们可能不需要的上下文项。你至少可以在知道你的应用程序的应用程序中拥有该功能。创建一个带有填充菜单项的活动库。其他应用程序可以通过扩展您的活动来使用该功能。 - Ron
@userSeven7s:我认为,如果您有一个根Activity作为所有应用程序活动的父级,则可以按照我上面描述的方式覆盖onCreateContextMenu - 这样每当用户长按时就会出现上下文菜单,是吗? - Barmaley
@barmaley:抱歉,这条评论是回复Tim的。我现在知道我应该在评论之前加上“@Tim”。我还将该评论作为答案添加了进去,证明它不是针对你的回答。你的回答没有问题,在个别应用程序中的上下文菜单中它运行良好。 - Ron

-1

当长按EditText时,可以向项目列表中添加内容。

为了让您朝着正确的方向前进,我将发布一些代码片段。

在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>

然后在您的主 Activity 中,做如下操作:

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;
        }
    });
}
}

希望这能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接