如何使用默认选项复制和 select 全部以编程方式启动 textview 的上下文操作栏?

How to start contextual action bar for text view programmatically with default opions copy and select all?

有没有什么方法可以在单击按钮时以编程方式启动与文本视图关联的上下文操作栏?它也应该包含 copy/select 的默认选项。 基本上,我想在我的文本视图中显示 selection 句柄,并在操作栏中显示 android 默认 copy/select 所有选项,单击按钮(而不是长 click/double点击)。

到目前为止我尝试了什么: 尝试使用 setCustomActionModeCallback() api,但这里的问题是用户需要长 press/double 单击文本视图才能显示 CAB。 尝试使用 startActionMode() api,但找不到保留默认项的方法。它只是打开一个新的空 CAB。我知道,我可以添加我的自定义副本-select 所有代码和利用这个空的 CAB,但我想使用 Android 提供的默认 CAB,而不是自己管理它。

编辑;我不能使用 EditText。视图只需要是 TextView,长按将被禁用。我通过将 TextView 设置为 selectable

来完成上述所有更改

Select 手动输入文本,然后长按:

textView.post(new Runnable() {
    @Override
    public void run() {
        Selection.selectAll((Spannable) tv.getText());
        tv.performLongClick();
    }
});

编辑:

问题是内置文本选择CAB是私有的,使用多个私有类。您需要复制大量代码或使用反射访问一堆方法才能使用它。

您可以制作自己的 CAB 菜单,但您还需要控制器手柄,这又是很多代码。

一个简单的解决方案是接受你所拥有的并使用我上面建议的方法。如果您想避免调用您的长按监听器,您可以在调用 cab 时将其删除:

Selection.selectAll((Spannable) tv.getText());
tv.setOnLongClickListener(null);
tv.performLongClick();
tv.setOnLongClickListener(mLongClickListener);

如果您想 select 在您的文本视图中添加文本,您可以采用多种方法。 您可以做的第一件事是设置 TextView 的 xml 属性。

  android:textIsSelectable = "true"

 txtView.setTextIsSelectable(true)

textIsSelectable 标志允许用户在 TextView 中做出 selection 手势,这反过来会触发系统的内置 copy/paste 控件。

android:selectAllOnFocus = true;
setSelectAllOnFocus(boolean)

如果文本 select 可用,则 select 当视图获得焦点时,它会全部显示。您可以将焦点设置为单击您的按钮。使用 RequestFocus() 方法。

更详细的学习可以参考这个Link。您会发现所有必需的任务都已完成。 http://developer.android.com/reference/android/widget/TextView.html[http://developer.android.com/reference/android/widget/TextView.html][1]

谢谢