CocosCreator添加安卓的一键复制功能

184 阅读1分钟

起因

游戏里面需要开发兑换码功能,Cocos里面的Editbox不支持把安卓系统剪切板的内容复制到Editbox文本

方案选定

  • 方案一:参考原生的做法,长按Editbox,然后选择复制
  • 方案二:在Editbox旁边放置一个按钮,点击按钮把内容复制到Editbox

经过从实现、时间、可能的bug预测等考虑后,暂时选择第二套方案,后续有时间可以继承Editbox,封装一个自定义的组件

问题解决

  • 添加按钮事件
/**
     * From the clipboard get text and paste it into EditBox
     * @param e Event
     */
    pasteFromClipboard(e) {
        if (cc.sys.isNative && cc.sys.os === cc.sys.OS_ANDROID) {
            // Call the static method of the android SDK to get the text from the clipboard
            const pastedText = jsb.reflection.callStaticMethod(
                "org/cocos2dx/javascript/SDKHelper",
                "getClipboardText",
                "()Ljava/lang/String;",
            );

            // Set the pasted text to the EditBox
            this._edit.string = pastedText;
        }
    }
  • 在安卓端添加获得剪贴板内容
/**
     * 获取剪贴板管理器
     *
     * @return 剪贴板管理器
     */
    public static ClipboardManager getClipboardManager() {
        return (ClipboardManager) ((AppActivity)mContext).getSystemService(Context.CLIPBOARD_SERVICE);
    }

    /**
     * 读取剪贴板文本
     *
     * @return 剪贴板文本
     */
    public static String getClipboardText() {
        ClipboardManager clipboardManager = getClipboardManager();
        if (clipboardManager.hasPrimaryClip() && clipboardManager.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
            ClipData.Item item = clipboardManager.getPrimaryClip().getItemAt(0);
            return item.getText().toString();
        }
        return "";
    }