clip object可以有三种形式:
Text:文字字符串。
文字是直接放在clip对象中,然后放在剪贴板里;粘贴这个字符串的时候直接从剪贴板拿到这个对象,把字符串放入你的应用存储中。
URI:一个Uri
对象。
表示任何形式的URI。这种形式主要用于从一个content provider中复制复杂的数据。
复制的时候把一个Uri
对象放在一个clip对象中,然后再放在剪贴板里;粘贴的时候取出这个clip对象,得到Uri,把它解析为一个数据资源比如content provider,然后从资源中复制数据到应用存储中。
Intent: Intent
对象。
这支持了复制应用快捷方式。
复制的时候把Intent对象放在clip对象中,再放入剪贴板;粘贴数据时,从clip对象中得到Intent对象,放入应用存储区域中。
剪贴板每次仅会持有一个clip对象,当应用放另一个clip对象进来时,前一个就消失了。
ClipboardManager
ClipboardManager代表了系统的剪贴板,通过getSystemService(CLIPBOARD_SERVICE)获取。
全名为android.text.ClipboardManager从API 11开始就废弃了。
取而代之的是它的子类:android.content.ClipboardManager (since API Level 11)。
ClipData, ClipDescription, and ClipData.Item
前面说的clip对象就是ClipData类的对象,其中包含了一个 ClipDescription
对象和一个或多个ClipData.Item
对象。
ClipDescription对象中包含了一个数组,描述clip对象的MIME类型。
ClipData.Item对象中包含文字、URI或者Intent数据。一个clip对象中可以包含一个或多个Item对象。
比如你想要复制list中的多项数据,你可以为list中的每一项创建一个ClipData.Item对象,然后把它们放进一个ClipData对象中,这样就一次性把多项数据都放在了剪贴板中。
注意ClipData这个类是API 11才有的。
ClipData中的简洁方法
ClipData类中有一些静态的简洁方法,用于创建只有一个ClipData.Item和一条简单描述( ClipDescription
)的ClipData对象。
newPlainText(label, text)返回ClipData对象,数据是文字text,描述是label,MIME类型是MIMETYPE_TEXT_PLAIN
。
类似的有:
newUri(resolver, label, URI)
newIntent(label, intent)
1.首先,获取剪贴板服务:
ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
2.然后把数据放在ClipData对象中。
对文字:
ClipData clip = ClipData.newPlainText("simple text","Hello, World!");
对URI:
private static final String CONTACTS = "content://com.example.contacts"; private static final String COPY_PATH = "/copy"; Uri copyUri = Uri.parse(CONTACTS + COPY_PATH + "/" + lastName); ClipData clip = ClipData.newUri(getContentResolver(),"URI",copyUri);
对Intent:
Intent appIntent = new Intent(this, com.example.demo.myapplication.class); ClipData clip = ClipData.newIntent("Intent",appIntent);
3.把clip对象放在剪贴板中:
clipboard.setPrimaryClip(clip);