Android 在app内显示word的简单方法

2019-04-25  本文已影响0人  无敌未央様

如果想把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);
}
上一篇下一篇

猜你喜欢

热点阅读