在AtextView项目上同时拥有一个OnlongPress菜单和Select-copy文本



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

如何将OnlongPress或OnCreateContextMenu与(启用(选择和副本文本相结合?可以从上下文菜单中启用Select-copy文本。

当然,我可以使用选择文本。但这冲突在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

当然,在选择文本后,我想将上下文菜单恢复。

这个功能是现实的吗?是的。对于应用程序,这是必不可少的。我也在其他应用程序中看到了它; - (

以下解决方案在大多数情况下有助于我。

我希望文本可以选择(用于复制和粘贴(,或者希望其他手势可以工作。

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

  • 在布局文件或以编程方式中,将Textisselectections设置为false。
  • 用手势在文本视图上设置一个OnTouchListener。
  • 允许其中一个手势切换到TextSelection模式。见下文。

如何以编程方式设置TextSelection?

  • 设置Textisselectable,可集中的,可长的
  • 将OnTouchListener设置为null。
  • 在TextView上安装ClickListener,以允许您切换回原始的TouchListener。

1(安装您的手势Handler:

// Create your Touch Listener  
onTouchListener = new OnSwipeTouchListener(mCtx, this);
view.setOnTouchListener( onTouchListener);

2(切换到TextSeluction Modus:

// 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;

最新更新