【问题标题】:Is there a way to set the Android clipboard to null (indicating no items on clipboard)?有没有办法将 Android 剪贴板设置为 null(表示剪贴板上没有项目)?
【发布时间】:2016-08-23 13:08:18
【问题描述】:

请仔细阅读此内容,因为有人提出了类似的问题,但这是一个新问题。

这是设置。

首先我知道我可以使用以下代码从剪贴板中读取(效果很好):

 private String readClipboard() {
        android.content.ClipboardManager clipboard = (android.content.ClipboardManager) appContext.getSystemService(Context.CLIPBOARD_SERVICE);
        android.content.ClipData clip = clipboard.getPrimaryClip();
        if (clip != null && clip.getItemCount() > 0) {
            ClipData.Item item = clip.getItemAt(clip.getItemCount() - 1);
            return item.getText().toString();
        }
        return "";

    }

其次,我找到了一种方法来清空我在剪贴板上设置的项目,代码如下(不太正确):

  private void clearClipboard(){
        android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
         // you can set an empty string or set to null, same result
        //android.content.ClipData clip = android.content.ClipData.newPlainText("", "");
        android.content.ClipData clip = android.content.ClipData.newPlainText(null,null);
        clipboard.setPrimaryClip(clip);

    }

是否擦除上一个项目

该代码确实在剪贴板上设置了一个空项目,以便清除前一个项目。

不从剪贴板中删除项目

但是,这实际上并没有从剪贴板中删除所有项目。这意味着当用户长按某个文本框时,系统会认为剪贴板上有一个项目(即使它是 null 或空字符串),它会显示如下:

在剪贴板上不显示任何内容

这实际上是不正确的,因为我们真正想要的是清除所有项目以向用户表明剪贴板上没有任何内容

Google Android API?

API 中是否有一些方法可以真正清除剪贴板?我已经搜索了很多,找不到任何东西,但想知道我是否错过了它?或者如果 Google API 忽略了这一点?

【问题讨论】:

  • the sourcesetPrimaryClip()好像支持null。你试过吗?
  • @CommonsWare 我也在看那个。我现在正在尝试。谢谢。我会让你知道。编辑:试过了。它似乎仍然表明剪贴板上有一个项目(弹出粘贴菜单)。

标签: java android copy clipboard paste


【解决方案1】:

在安卓开发copy & paste doc

您可以使用clipboard.hasPrimaryClip()检查剪贴板是否为空

看这个: 检测剪贴板中是否存在任何数据并检查是否为纯文本

获取“粘贴”菜单项的 ID MenuItem mPasteItem = menu.findItem(R.id.menu_paste);

如果剪贴板不包含数据,请禁用粘贴菜单项。 如果确实包含数据,请决定是否可以处理数据。

if (!(clipboard.hasPrimaryClip())) {

    mPasteItem.setEnabled(false);

    } else if (!(clipboard.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN))) {

        // This disables the paste menu item, since the clipboard has data but it is not plain text
        mPasteItem.setEnabled(false);
    } else {

        // This enables the paste menu item, since the clipboard contains plain text.
        mPasteItem.setEnabled(true);
    }
}

【讨论】:

    【解决方案2】:

    从 Android 上的 API 28 开始,我们有:

    ClipboardManager clipboard = (ClipboardManager)
         context.getSystemService(context.CLIPBOARD_SERVICE)
    

    所以

    clipboard.clearPrimaryClip ()
    

    context 是你自己的上下文,this 在你的活动中

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多