【发布时间】:2012-05-10 07:03:56
【问题描述】:
我想为 TextView 启用标准复制粘贴(与 EditText 相同)。我该怎么做?
我尝试使用不可编辑的 EditText,但效果不佳(有时它变得可编辑或未显示复制粘贴覆盖)。而且一般来说这可能不是一个好方法。
需要从 API 7 开始的可行解决方案。
【问题讨论】:
标签: android textview copy-paste
我想为 TextView 启用标准复制粘贴(与 EditText 相同)。我该怎么做?
我尝试使用不可编辑的 EditText,但效果不佳(有时它变得可编辑或未显示复制粘贴覆盖)。而且一般来说这可能不是一个好方法。
需要从 API 7 开始的可行解决方案。
【问题讨论】:
标签: android textview copy-paste
即android:textIsSelectable="true"
【讨论】:
EditTextPreference 已经支持复制/粘贴。它似乎在“设置”应用中。
要启用 TextView 的标准复制/粘贴,您可以选择以下之一:
更改布局文件:将以下属性添加到您的 TextView
android:textIsSelectable="true"
在您的 Java 类中编写此行以编程方式设置它。 myTextView.setTextIsSelectable(true);
长按 TextView 可以看到复制/粘贴操作栏。
【讨论】:
这适用于蜂窝前的复制:
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();
}
});
【讨论】:
android:textIsSelectable 存在于布局中,它只会在较低的 API 级别上被忽略。然后在 if 语句中使用 Ixx 的解决方案,检查 API 级别是否低于 11。两全其美。 android:textIsSelectable的好处在于它给了你平台的文本选择操作栏,并且有很好的原生感觉。
Requires API 11,更新代码,不推荐使用以前的方法
无主题全屏解决方案 ActionBar
扩展TextView并在构造函数中粘贴以下代码
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;
}
});
【讨论】:
在 xml textview 中粘贴此代码
android:textIsSelectable="true"
然后在java文件中,
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();
}
});
要求:需要复制粘贴textview中的文本。
OutCome : 使用 textview ,一旦我点击了 textview。它会自动复制文本视图中的文本。
注意:在导入剪贴板管理器时尝试首选
请选择文本剪贴板管理器
import android.text.ClipboardManager; // prefer this
尽量避免内容剪贴板管理器
import android.content.ClipboardManager; // Not this
【讨论】:
使用主题
@android:style/Theme.Black.NoTitleBar.Fullscreen
或
@android:style/Theme.WithActionBar
在xml中设置TextView
android:textIsSelectable="true"
【讨论】:
如果有人想加倍努力并一键选择并复制到剪贴板:
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);
}
});
电话是TextView,phone.Text 是要复制到剪贴板的文本。
【讨论】:
this 更好:
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");
}
【讨论】:
对于EditText,
在活动清单里面使用
android:windowSoftInputMode="adjustResize"
【讨论】: