Android中的ClipData中的“ label”参数究竟是什么?


79

根据Android文档,ClipData使用“标签”作为复制数据的一种表示形式。

ClippedData是一种复杂类型,包含一个或Item实例,每个实例都可以保存一个数据项的一个或多个表示形式。为了显示给用户,它还具有标签和图标表示。

然后在某些API文档中进一步将“标签”解释为剪辑数据的用户可见标签。但是,我仍然对标签的用法感到困惑。

用户如何看到此标签?我应该如何使用?调用ClipData工厂方法时应为该标签设置什么newPlainText(CharSequence label, CharSequence text)?例如:

private void copyToClipBoard() {

    ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
    ClipData clip = ClipData.newPlainText(
            "text label", // What should I set for this "label"?
            "content to be copied");
    clipboard.setPrimaryClip(clip);
    Toast.makeText(AboutActivity.this, "Saved to clip board", Toast.LENGTH_SHORT).show();
}

Answers:


86
ClipData clip = ClipData.newPlainText(
            "text label", 
            "content to be copied");

此处的文本标签描述了剪辑中的数据

例如。

ClipData clip = ClipData.newPlainText(
            "user Name",
            user.getName()); 

我们可以通过使用

clip.getDescription ();

4
Userdocs中“剪辑数据的用户可见标签”中的术语实际上是指开发人员,而不是应用程序的用户吗?我认为应用程序的用户知道这个标签没有任何价值……
hackjutsu 2015年

39
标签仅适用于开发人员,而不适用于应用程序用户
Gaurav 2015年

3
真好!我对“用户可见”的描述感到困惑...但是现在很清楚。
hackjutsu 2015年

24

似乎文档中的“剪辑数据的用户可见标签”描述应被解释为开发人员可以设置然后自己显示给用户的内容,而不是Android系统将显示给用户的内容。

在查看Android源代码时,在Android 5.0之前,ClipDescription.getLabel()方法似乎未使用。在5.0 RemoteInput中,RemoteInputCompatJellybean和com.android.mail.compose.ComposeActivity使用方法声明。

如果您查看用法,所有这些都将设置一个标签,该标签不是用户可见的,而是用于以编程方式标识代码中不同位置的剪辑。

当如何ClipData.newPlainText()寻找使用中的Android,大部分的时间空被赋予作为标签,表明该标签是不是真正用于什么。

当然,某些电话制造商或某些其他应用程序开发人员可能会在某些情况下使用标签并将其显示给用户。但一般来说,可以安全地假设剪辑的标签仅在您自己显示时才会在您的应用中显示给用户。


2

今天,在使用我的应用程序时,我发现了ClipData标签的一个用例。一些应用程序将其设置为null,而另一些应用程序则使用它很多。

就我的应用而言,我正在收听ClipManager的 addPrimaryClipChangedListener

我正在几乎始终在后台运行的服务类中执行此操作。我想将从我的应用程序中添加到primaryClip的数据与在另一个应用程序中添加的数据不同(比如说在Web浏览器中复制的文本)。

这是我的代码以及我如何使用ClipData标签的摘录:

mClipBoardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
            @Override
            public void onPrimaryClipChanged() {
                String clipLabel = "default";
                if (mClipBoardManager.getPrimaryClip().getDescription().getLabel() != null) {
                    clipLabel = mClipBoardManager.getPrimaryClip().getDescription().getLabel().toString();
                }
                if (clipLabel.equals("auto_copy_text")) {
                    //TODO: Text from my app do stuffs you will do with text from my app
                } else {
                    //TODO: Text from some other app
                }

            }
        });

在将数据添加到primaryClip的应用程序中,我包括如下标签:

private void addToClipboard(String text) {
        mClipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
        mClipboardManager.setPrimaryClip(ClipData.newPlainText("auto_copy_text", text));
    }

我希望这有帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.