我编写了一个代码,用于将计算器中的答案复制到剪贴板,然后关闭计算器并打开另一个窗口。答案应该使用代码粘贴在这里:
textOut2= (TextView) findViewById(R.id.etInput1);
final ClipboardManager clipBoard= (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
textOut2.setText(clipBoard.getText());
但它永远不会奏效。这可能是一个错误吗?附:我知道什么文本被复制,因为我可以使用长按粘贴,但我想自动完成。是否可以为复制的文本指定特定名称?因为我可以更容易地粘贴单词,因为我有很多不同的TextView
答案 0 :(得分:11)
public CharSequence getText() 自:API等级11 不推荐使用此方法。 请改用getPrimaryClip()。这将检索主剪辑并尝试将其强制转换为字符串。
String textToPaste = null;
ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboard.hasPrimaryClip()) {
ClipData clip = clipboard.getPrimaryClip();
// if you need text data only, use:
if (clip.getDescription().hasMimeType(MIMETYPE_TEXT_PLAIN))
// WARNING: The item could cantain URI that points to the text data.
// In this case the getText() returns null and this code fails!
textToPaste = clip.getItemAt(0).getText().toString();
// or you may coerce the data to the text representation:
textToPaste = clip.getItemAt(0).coerceToText(this).toString();
}
if (!TextUtils.isEmpty(textToPaste))
((TextView)findViewById(R.id.etInput1)).setText(textToPaste);
您可以通过ClipData.Item
添加包含文字的其他ClipData.addItem()
项,但无法识别它们。
答案 1 :(得分:2)
试试这个
textOut2= (TextView) findViewById(R.id.etInput1);
final ClipboardManager clipBoard= (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
String temp = new String;
temp = clipBoard.getText().toString();
textOut2.setText(temp);
答案 2 :(得分:1)
在 Kotlin 中:
val clipboard = (getSystemService(Context.CLIPBOARD_SERVICE)) as? ClipboardManager
val textToPaste = clipboard?.primaryClip?.getItemAt(0)?.text ?: return
binding.<your EditText camelCase id>.setText(textToPaste)
Fragment 内部:getSystemService() 是Context 类上的一个方法,需要先调用Context。可以通过使用 getContext() 或 getActivity() - Activity 也是一个上下文。
this.activity.getSystemService(...)
this.context.getSystemService(...)
或者:
activity.getSystemService(...)
context.getSystemService(...)
另外记住只有安全 (?.) 或非空断言 (!!.) 调用。