Android剪贴板.getText()已弃用;那么如何获取其中的文本项呢

yebdmbv4  于 2022-12-25  发布在  Android
关注(0)|答案(3)|浏览(229)

这很好用,向我显示了最后一个放入Android剪贴板的字符串是什么,碰巧是euswcnmst
Log.w("clip", clipboard.getText().toString());
但是clipboard对象不推荐使用getText
同时,如果我使用Log.w("clip", clipboard.getPrimaryClip().toString());,我会得到这个,和ClipData { text/plain "label" {T:euswcnmst} }完全一样
我看到了我想要的内容,并且假设字符串剪贴板项总是使用这种格式,我可以使用String函数(查找:和后续的},然后执行substring)来提取euswcnmst,但这是一个技巧。
我该怎么办?

    • 编辑**

根据Commonsware的回答,* 以下是 * 我应该做的事情:

ClipData clip = clipboard.getPrimaryClip();

if(clip == null || clip.getItemCount() == 0)
  return; // ... whatever; just don't go to next line

String t = clip.getItemAt(0).getText().toString();
  • 编辑2 *

如果剪贴板中的最后一个ITEM不是文本,则上面的代码将给出以下错误:
x1米11米1x
以下是修复方法(我在下面添加了第三行):

if(   clip == null 
   || clip.getItemCount() == 0 
   || clip.getItemCount() > 0 && clip.getItemAt(0).getText() == null
  )
    return; // ... whatever; just don't go to next line
iezvtpos

iezvtpos1#

请理解剪贴板并不只是用于文本,复杂的结构可以放置在剪贴板上,在getPrimaryClip()中的ClipData对象中包含1到N个ClipData.Item对象。
给定您的ClipData,调用getItemCount()来确定项目的数量。对于您想要尝试使用的任何项目,在ClipData上调用getItemAt()来获取相应的ClipData.Item。在该项目上,您可以调用getText()coerceToText()来尝试获取该项目的文本表示。

bfnvny8b

bfnvny8b2#

使用以下代码

String copyString = clipboard.getPrimaryClip().getItemAt(0).getText()
k5hmc34c

k5hmc34c3#

ClipboardManager cm = (ClipboardManager)getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
            ClipData clipData=ClipData.newPlainText("label",key.getText().toString());
            cm.setPrimaryClip(clipData);
            Toast.makeText(getApplicationContext(), "Copied :)", Toast.LENGTH_SHORT).show();

相关问题