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

时间:2015-10-19 06:21:09

标签: android

根据Android documentation,ClipData使用“label”作为复制数据的一种表示。

  

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

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

该标签对用户如何可见?我该怎么用?当我调用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();
}

提前谢谢你:)

4 个答案:

答案 0 :(得分:48)

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

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

例如。

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

我们可以使用

来解决这个问题
clip.getDescription ();

答案 1 :(得分:21)

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

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

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

在Android中查看ClipData.newPlainText()is used的方式时,大多数情况下null是作为标签给出的,这表明该标签并未真正用于任何事情。

当然,某些手机制造商或其他应用程序开发人员可能会在某些情况下将标签显示给用户。但一般情况下,如果您自己展示剪辑的标签,只会在您的应用中向用户显示,这应该是安全的。

答案 2 :(得分:0)

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

对于我的应用程序,我正在收听ClipManager的addPrimaryClipChangedListener

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

以下是我的代码的摘要以及我如何使用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));
    }

我希望这对您有帮助

答案 3 :(得分:0)

我注意到的另一件事是,如果用户再次复制具有相同标签的数据,则之前具有相同标签的文本将被覆盖。所以一个标签可以保留唯一的一份数据副本,并将有助于清除以前的混乱。 此外,标签可用于识别您的唯一文本,并可用于检索您的文本数据,即使它不是用户复制的最后一件事。