15

我有一个ListView每个项目都是一个TextView

我想启用类似于EditText显示默认上下文菜单的长按行为,其中包含“全选”、“全部剪切”、“全部复制”等项目。

有没有一种简单的方法可以为 a 启用此功能TextView

4

6 回答 6

21

我想我有一个解决办法。打电话
registerForContextMenu(yourTextView);

并且您TextView将注册以接收上下文菜单事件。

然后覆盖onCreateContextMenu你的Activity

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    //user has long pressed your TextView
    menu.add(0, v.getId(), 0, "text that you want to show in the context menu - I use simply Copy");

    //cast the received View to TextView so that you can get its text
    TextView yourTextView = (TextView) v;

    //place your TextView's text in clipboard
    ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
    clipboard.setText(yourTextView.getText());
}

希望这可以帮助您和其他正在寻找从TextView

于 2011-05-30T18:01:38.267 回答
7

实际上,您不必自己开发此功能。您只需要使用 EditText 而不是 TextView,同时将 EditText 的 android:editable 设置为 false。我的代码在这里:

R.layout.edittext.xml

<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="40dip"
android:editable="false" 
android:background="@null"
android:textColor="#FFFFFF"/>

ListItemCopyTextActivity.java

public class ListItemCopyTextActivity extends Activity {    

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LinearLayout ll = new LinearLayout(this);
    ListView lv = new ListView(this);

    String[] values = new String[15];
    for (int i = 0; i < 15; i++) {
        values[i] = "ListItem NO." + i;
    }

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.edittext, values);
    lv.setAdapter(adapter);

    ll.addView(lv, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

    setContentView(ll);

    }
}

您只需长按该项目,然后选择选择文本、复制、剪切、过去等。

于 2012-06-14T03:31:27.190 回答
4

要允许用户复制部分或全部 TextView 的值并将其粘贴到其他位置,

将 XML 属性设置{@link android.R.styleable#TextView_textIsSelectable android:textIsSelectable}"true"

或者

打电话{@link #setTextIsSelectable setTextIsSelectable(true)}

于 2015-06-23T09:38:11.847 回答
1

您可能希望在 ListView 上注册一个 onItemLongClickListener,然后根据所选项目为用户提供您选择的任何选项。

于 2011-05-30T18:06:40.833 回答
0

我有一个解决方案,但我并不完全有用。

只需使用此方法:

txtDescDetail.setCursorVisible(true);

我希望这样做。

于 2019-09-18T03:58:47.000 回答
0

这是解决方案

 <TextView
        android:id="@+id/textID"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:clickable="true"
        android:focusable="true"
        android:text="Terms and Conditions"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

覆盖setOnLongClickListener

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    textID.setTextIsSelectable(true)
    textID. setOnLongClickListener {
       val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
       val clip = ClipData.newPlainText("Copied String",  textID.text)
       clipboardManager.setPrimaryClip(clip)
       true // Or false if not consumed
   }
}

预期的行为将如下图所示

在此处输入图像描述

于 2020-10-06T09:27:10.377 回答