Copy text from TextView on Android

前端 未结 6 1032
野趣味
野趣味 2020-12-02 21:10

I have a ListView where each item is a TextView.

I want to enable the long press behaviour similar to an EditText that display

相关标签:
6条回答
  • 2020-12-02 21:47

    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)}.

    0 讨论(0)
  • 2020-12-02 21:50

    I have a solution, but I'm not exactly to useful.

    just use this method :

    txtDescDetail.setCursorVisible(true);
    

    i hope to do it.

    0 讨论(0)
  • 2020-12-02 21:55

    You might want to register an onItemLongClickListener on your ListView and then based on the selected item, provide the user with whatever options you choose.

    0 讨论(0)
  • 2020-12-02 22:00

    Here is the solution

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

    override 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
       }
    }
    

    the expected behavior will be like the image below

    0 讨论(0)
  • 2020-12-02 22:10

    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

    0 讨论(0)
  • 2020-12-02 22:13

    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.

    0 讨论(0)
提交回复
热议问题