如果想把word文档在app内显示,通常的方法是把word文档转码为HTML文件,保存在项目的assets中吗,在项目组用webView呈现。
public class ProtocolActivity extends AppCompatActivity implements View.OnClickListener {
WebView webView;
ImageButton back;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.protocol);
back=(ImageButton)findViewById(R.id.back_toolbar_btn);
back.setOnClickListener(this);
webView = (WebView) findViewById(R.id.webView);
setWebViewListener();
webView.loadUrl("file:////android_asset/privacy_protocol.html");
}
public void setWebViewListener() {
// 不调用系统浏览器
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
@Override
public void onPageCommitVisible(WebView view, String url) {
super.onPageCommitVisible(view, url);
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String request) {//主要是用的这个方法,这个方法会在每次读取图片的时候回调,
//只要在这个时候返回要的图片即可,之前之所以把图片的名字命名成跟html中一样的是为了少写代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.e("TAG", request + "返回的request");
}
AssetManager am = getResources().getAssets();
InputStream is = null;
String substring = request.substring(request.lastIndexOf("/") + 1, request.lastIndexOf("."));
try {
is = am.open("helpimg/" + substring + ".png");
WebResourceResponse res = new WebResourceResponse("text/html", "utf-8", is);
return res;
} catch (IOException e) {
e.printStackTrace();
}
return super.shouldInterceptRequest(view, request);
}
});
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.back_toolbar_btn:
finish();
break;
default:
break;
}
}
}
但这样有个问题,就是HTML文件中的图片可能会加载不出来,原因是因为http和https的混合问题。
解决方案:
在webview加载页面之前,设置加载模式为
MIXED_CONTENT_ALWAYS_ALLOW(不太安全)
或者 MIXED_CONTENT_COMPATIBILITY_MODE(个人建议)。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSetting.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}
网友评论