起因
游戏里面需要开发兑换码功能,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 "";
}