问题
I want to enable standard copy paste for a TextView (the same as for EditText). How can I do it?
I tried using a non-editable EditText but it didn't work well (sometimes it became editable or the copy paste overlay was not shown). And it's probably not a good approach generally.
Need a working solution starting at API 7.
回答1:
Try android:textIsSelectable.
i.e., android:textIsSelectable="true"
回答2:
To enable the standard copy/paste for TextView, U can choose one of the following:
Change in layout file: add below property to your TextView
android:textIsSelectable="true"
In your Java class write this line to set it programmatically.
myTextView.setTextIsSelectable(true);
And long press on the TextView you can see copy/paste action bar.
回答3:
This works for copy pre-Honeycomb:
import android.text.ClipboardManager;
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ClipboardManager cm = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
cm.setText(textView.getText());
Toast.makeText(context, "Copied to clipboard", Toast.LENGTH_SHORT).show();
}
});
回答4:
Requires API 11, Updated Code, previous method is deprecated
Solution for theme full screen without ActionBar
Extend TextView
and in constructor paste following code
this.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ClipboardManager cManager = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData cData = ClipData.newPlainText("text", getText());
cManager.setPrimaryClip(cData);
Util.toast(mContext, string.text_copyed);
return true;
}
});
回答5:
use theme
@android:style/Theme.Black.NoTitleBar.Fullscreen
or
@android:style/Theme.WithActionBar
set TextView in xml
android:textIsSelectable="true"
see result
回答6:
In xml textview paste this code
android:textIsSelectable="true"
Then in java file,
final TextView txtcopypaste = findViewById(R.id.txtcopypaste); // my textview
txtcopypaste.setOnClickListener(new View.OnClickListener() { // set onclick listener to my textview
@Override
public void onClick(View view) {
ClipboardManager cm = (ClipboardManager)getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
cm.setText(txtcopypaste.getText().toString());
Toast.makeText(getApplicationContext(), "Copied :)", Toast.LENGTH_SHORT).show();
}
});
Requirement : Need to copy and paste the text which is in the textview.
OutCome : Using textview , once i clicked the textview. Its automatically copied the text which is in the textview.
Note: While importing clipboardmanager try to prefer
Please prefer text clipboard manager
import android.text.ClipboardManager; // prefer this
try to avoid content clipboard manager
import android.content.ClipboardManager; // Not this
回答7:
if someone wants to go the extra mile and do the select and copy to the clipboard with one click :
phone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("PhoneNumber", phone.getText());
clipboard.setPrimaryClip(clip);
}
});
phone is the TextView and phone.Text is the Text that will be copied to the clipboard.
回答8:
this is better:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
final android.content.ClipboardManager clipboardManager = (android.content.ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
final android.content.ClipData clipData = android.content.ClipData
.newPlainText("text label", "text to clip");
clipboardManager.setPrimaryClip(clipData);
} else {
final android.text.ClipboardManager clipboardManager = (android.text.ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.setText("text to clip");
}
回答9:
For an EditText
,
in manifest inside the activity use
android:windowSoftInputMode="adjustResize"
来源:https://stackoverflow.com/questions/10386084/how-do-i-enable-standard-copy-paste-for-a-textview-in-android