Android 是否同时具有onLongPress菜单和选择在ExtView项上复制文本?

Android 是否同时具有onLongPress菜单和选择在ExtView项上复制文本?,android,Android,我的应用程序包含一个包含TextView项目的RecyclerView。在每个TextView项目上,我都定义了一些功能,比如将文本共享到另一个应用程序 如何将onLongPress或onCreateContextMenu与(启用)选择和复制文本相结合?可以从关联菜单中启用“选择并复制文本” 当然,我可以使用选择文本。但该与textview项目上的长按(上下文)菜单相冲突 <TextView android:layout_width="wrap_content" andro

我的应用程序包含一个包含TextView项目的RecyclerView。在每个TextView项目上,我都定义了一些功能,比如将文本共享到另一个应用程序

如何将onLongPress或onCreateContextMenu与(启用)选择和复制文本相结合?可以从关联菜单中启用“选择并复制文本”

当然,我可以使用选择文本。但该与textview项目上的长按(上下文)菜单相冲突

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""
    android:id="@+id/pwTextView"
    android:enabled="true"
    android:textIsSelectable="true"   <== mandatory
    android:focusable="true"          <== optionally
    android:longClickable="true" />   <== optionally

以下解决方案对大多数情况都有帮助

我希望文本是可选择的(用于复制和粘贴)或希望其他手势工作

最初在文本字段上设置手势:

  • 在布局文件中或以编程方式将textIsSelectable设置为false
  • 使用手势在textview上设置onTouchListener
  • 允许其中一个手势切换到文本选择模式。见下文
如何以编程方式设置文本选择

  • 将文本IsSelectable、focusable、longPressable设置为true
  • 将onTouchListener设置为null
  • 在textview上安装clickListener以允许您切换回原始TouchListener
1) 安装您的GestureHandler:

// Create your Touch Listener  
onTouchListener = new OnSwipeTouchListener(mCtx, this);
view.setOnTouchListener( onTouchListener);
2) 切换到文本选择模式:

// Create your popup with an menu option to switch to textselection modus:
PopupMenu popup = new PopupMenu(mCtx, view);
popup.inflate(R.menu.text_options_menu);
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case ...
            case R.id.text_textisselectable:
                view.setOnTouchListener(null);
                ((TextView)view).setTextIsSelectable( true);
                ((TextView)view).setFocusable( true);
                ((TextView)view).setLongClickable( true);
                // Install a click listener to switch back to the previous Touch Listener
                ((TextView)view).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        PopupMenu popupx = new PopupMenu(mCtx, view);
                        popupx.inflate(R.menu.selecttext_back_menu);
                        popupx.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                            @Override
                            public boolean onMenuItemClick(MenuItem item) {
                                ((TextView)view).setTextIsSelectable( false);
                                ((TextView)view).setFocusable( false);
                                ((TextView)view).setLongClickable( false);
                                view.setOnTouchListener(onTouchListener);
                                return true;
                            }});
                            popupx.show();
                        }
                    });
                break;

您可以做一件事,只需按住整个项目视图即可进行设置。然后在该视图中使用特定的文本视图并对其进行操作。