在2dx界面中嵌套加载显示一个webview,最简单的用法就是直接在一个WebView控件中显示,外加设置了一些简单的属性,可以自定义这个webview的大小。
java代码如下:
public class bxWebview extends Cocos2dxActivity {
static WebView m_webView;
static bxWebview majiang = null;
static FrameLayout m_webLayout;
static LinearLayout topLayout;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 全局变量保存this
majiang = this;
// 初始化一个空的布局
m_webLayout = new FrameLayout(this);
m_webLayout.setPadding(30, 50, 30, 10);
addContentView(m_webLayout, new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT
// LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT
));
}
public Cocos2dxGLSurfaceView onCreateView() {
Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
// TestCpp should create stencil buffer
glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
return glSurfaceView;
}
static {
System.loadLibrary("cocos2dcpp");
}
public static void openWebView() {
majiang.runOnUiThread(new Runnable() {// 在主线程里添加别的控件
@SuppressLint("SetJavaScriptEnabled")
public void run() {
// 初始化webView
m_webView = new WebView(majiang);
// 设置webView能够执行javascript脚本
m_webView.getSettings().setJavaScriptEnabled(true);
// 设置可以支持缩放
m_webView.getSettings().setSupportZoom(true);// 设置出现缩放工具
m_webView.getSettings().setBuiltInZoomControls(true);
// 载入URL
m_webView.loadUrl("http://www.baidu.com");
// 使页面获得焦点
m_webView.requestFocus();
// 如果页面中链接,如果希望点击链接继续在当前browser中响应
m_webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view,
String url) {
if (url.indexOf("tel:") < 0) {
view.loadUrl(url);
}
return true;
}
});
topLayout = new LinearLayout(majiang);
topLayout.setOrientation(LinearLayout.VERTICAL);
topLayout.addView(m_webView);
// 再把线性布局加入到主布局
m_webLayout.addView(topLayout);
}
});
}
public static void removeWebView() {
m_webLayout.removeView(topLayout);
topLayout.destroyDrawingCache();
topLayout.removeView(m_webView);
m_webView.destroy();
}
public boolean onKeyDown(int keyCoder, KeyEvent event) {
if (m_webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK) {
m_webView.goBack();
} else {
removeWebView();
}
return false;
}
}
c++中调用方法:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
JniMethodInfo minfo;
bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/xxx/xxx/bxWebview","openWebView","()V");
if (isHave)
{
CCLog("exists----------");
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
}else{
CCLog("do not exist----------");
}
#endif
头文件包含:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#include <android/log.h>
#endif
效果图: