这两天遇到一个问题,就是需要在自己的APP里面引用别的网页,但是呢有一个网页使用自己APP上门的WebView加载不出来,当然了,不信诸位可以试试,网址是
https://m.douban.com/note/452724957/?type=like
当然了,最先呢我是直接调用系统的浏览器来显示的,但是呢考虑到如果没有系统浏览器该怎么办,所以就搞了个高大上的WebView来显示
下面代码是原来使用自带浏览器的:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://m.douban.com/note/452724957/?type=like"));
startActivity(intent);
后来查了下资料,觉得用WebView来显示网页比较好,不用再一次的跳转调用其他浏览器,直接可以在APP里面显示出来(相当于一个网页页面),于是代码改成了这样:
Intent intent=new Intent(getApplicationContext(), WebViewActivity.class);
intent.putExtra("WebUrl","https://m.douban.com/note/452724957/?type=like");
startActivity(intent);
但是呢这样了之后不知道什么原因,跳转之后也接受到数据了,但是就是不能显示出我想要的页面,显示的页面一片空白,最后决定将网页下载到本地,用WebView加载本地的HTML
首先需要下载需要的HTML页面(网上有方法),这里要注意选择自己需要的xxx.html格式(试过一不小心下载的是xxx.mhtml格式的读出来的是一堆字母代码,没有一个中文),下好之后在Android Studio中自己的model里的main目录下建立文件名为assets的一个Folder(参考http://blog.youkuaiyun.com/u011710991/article/details/52219648),建好之后将下载的HTML放到里面,在项目下打开.iml文件,检查标签有没有<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets">这一句,没有的在最后一行加上
但是呢在打开HTML文件的时候,问题又来了,这出错了,翻译是id重复了,把第一个错误的那行连同前面一行、后面一行删掉就好
之后代码变成了这样:
Intent intent=new Intent(content, WebViewActivity.class);
intent.putExtra("WebUrl","file:///android_asset/myweb.html");
startActivity(intent);
另一个界面代码:
public class WebViewActivity extends Activity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_view_layout);
mWebView = (WebView) findViewById(R.id.see_web_view);
WebSettings settings = mWebView.getSettings();
Intent it = getIntent();
String WebUrl = it.getStringExtra("WebUrl");
Log.e("WebView--->", String.valueOf(WebUrl));
mWebView.loadUrl(WebUrl);
settings.setJavaScriptEnabled(true); //这里如果本地html引入了javascript那么需要把这个设置为true
settings.setAllowFileAccess(true);
settings.setDefaultTextEncodingName("utf-8"); //设置文本编码
settings.setAppCacheEnabled(true);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);//设置缓存模式
settings.setDomStorageEnabled(true);
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(true);
settings.setLoadWithOverviewMode(true);
settings.setUseWideViewPort(true);
settings.setLoadsImagesAutomatically(true);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
}
}
到这里大功告成!