从Android上的TextView复制文本

Erd*_*dal 14 select android contextmenu copy textview

我有一个ListView每个项目的地方TextView.

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

有没有一种简单的方法来实现这个TextView?

pan*_*dre 20

我想我有一个解决方案.打电话吧
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());
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助您和其他任何人寻找一种方法来复制文本 TextView

  • 它确实有效.虽然它在用户实际单击复制之前复制文本.这可能会令人困惑并覆盖他们的剪贴板.另一种方法是在onContextItemSelected中执行复制.您已经将菜单选项ID设置为视图ID,但未使用它.此外,如果您的目标设备是<API 11,请确保为此示例导入​​android.text.ClipboardManager而不是android.content.ClipboardManager. (4认同)

小智 8

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

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

或者

称呼{@link #setTextIsSelectable setTextIsSelectable(true)}。


Ruo*_*ang 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"/>
Run Code Online (Sandbox Code Playgroud)

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

    }
}
Run Code Online (Sandbox Code Playgroud)

您可以长按该项目,然后选择选择文本,复制,剪切,过去等.

  • 对我不起作用.如果editable为false,我会得到"TextView不支持文本选择.操作模式已取消." 使用android:textIsSelectable对我来说是一个很好的解决方案. (2认同)