Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Copy text from TextView on Android

I have a ListView where each item is a TextView.

I want to enable the long press behaviour similar to an EditText that displays the default context menu with items like "Select all", "Cut all", "Copy all", etc.

Is there an easy way to enable this for a TextView?

like image 820
Erdal Avatar asked Jun 01 '10 20:06

Erdal


People also ask

How do I copy text from TextView?

Select + copy text in a TextView? Generally, we can copy / paste the value from EditText by long click. It is an in-build functionality for Android.

How do you copy to clipboard on Android?

Highlight the text, long-press the selected text, then choose Copy. Long-press an empty field and select Paste to insert the copied text. Alternative method: Use the Gboard keyboard to manage the clipboard.


3 Answers

I think I have a solution. Just call
registerForContextMenu(yourTextView);

and your TextView will be registered for receiving context menu events.

Then override onCreateContextMenu in your 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());
}

Hope this helps you and anyone else looking for a way to copy text from a TextView

like image 181
pandre Avatar answered Sep 22 '22 22:09

pandre


Actually, you do not have to develop this feature by yourself. You just need to use EditText instead TextView, while you set the android:editable of EditText to false. My code is here:

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

    }
}

You can just long click the item, and choose the select text, copy, cut, past etc.

like image 7
Ruobin Wang Avatar answered Sep 24 '22 22:09

Ruobin Wang


To allow users to copy some or all of the TextView's value and paste it somewhere else,

set the XML attribute {@link android.R.styleable#TextView_textIsSelectable android:textIsSelectable} to "true"

or

call {@link #setTextIsSelectable setTextIsSelectable(true)}.

like image 6
Samuel Avatar answered Sep 20 '22 22:09

Samuel