Скопируйте текст из TextView на Android - PullRequest
14 голосов
/ 02 июня 2010

У меня есть ListView, где каждый элемент представляет собой TextView.

Я хочу включить режим длительного нажатия, аналогичный EditText, который отображает контекстное меню по умолчанию с такими элементами, как «Выбрать все», «Вырезать все», «Копировать все» и т. Д.

Есть ли простой способ включить это для TextView?

Ответы [ 4 ]

20 голосов
/ 30 мая 2011

Я думаю, у меня есть решение. Просто позвоните
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

7 голосов
/ 14 июня 2012

На самом деле вам не нужно разрабатывать эту функцию самостоятельно. Вам просто нужно использовать EditText вместо TextView, в то время как вы устанавливаете для android: editable of EditText значение 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);

    }
}

Вы можете просто долго нажимать на элемент и выбирать текст, копировать, вырезать, прошивать и т. Д.

3 голосов
/ 23 июня 2015

Чтобы разрешить пользователям копировать некоторые или все значения TextView и вставлять их в другое место,

установить атрибут XML {@link android.R.styleable#TextView_textIsSelectable android:textIsSelectable} на "true"

или

Звоните {@link #setTextIsSelectable setTextIsSelectable(true)}.

1 голос
/ 30 мая 2011

Возможно, вы захотите зарегистрировать onItemLongClickListener в вашем ListView, а затем, основываясь на выбранном элементе, предоставить пользователю любые параметры, которые вы выберете.

...