关闭

Cocos2d-x界面中嵌套android的webview

2683人阅读 评论(2) 收藏 举报
分类:

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

public class WebViewActivity extends Activity {
	WebView wv;

	@SuppressLint("SetJavaScriptEnabled")
	@Override
	public 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);
		// 全局变量保存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



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


0
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:123567次
    • 积分:1666
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:33篇
    • 译文:0篇
    • 评论:35条
    文章分类
    最新评论