Cocos2d-x界面中嵌套android的webview

来源:互联网 发布:淘宝口红代购是真的吗 编辑:程序博客网 时间:2024/05/22 03:33

在2dx界面中嵌套加载显示一个webview,最简单的用法就是直接在一个WebView控件中显示,代码如下:

public class WebViewActivity extends Activity {WebView wv;@SuppressLint("SetJavaScriptEnabled")@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);setContentView(R.layout.main);wv = (WebView) findViewById(R.id.webview);// wv.loadUrl("http://192.168.1.112/ttt.htm");wv.loadUrl("http://www.baidu.com");wv.setWebViewClient(new WebViewClientDemo());wv.getSettings().setJavaScriptEnabled(true);}private class WebViewClientDemo extends WebViewClient {@Override// 在WebView中而不是默认浏览器中显示页面public boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}}}

再试一试直接全代码显示,外加设置了一些简单的属性,可以自定义这个webview的大小

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);// 全局变量保存thismajiang = 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 bufferglSurfaceView.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() {// 初始化webViewm_webView = new WebView(majiang);// 设置webView能够执行javascript脚本m_webView.getSettings().setJavaScriptEnabled(true);// 设置可以支持缩放m_webView.getSettings().setSupportZoom(true);// 设置出现缩放工具m_webView.getSettings().setBuiltInZoomControls(true);// 载入URLm_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



这样可以显示网页的话就可以做很多事情了,也方便了代码。


原创粉丝点击