【问题标题】:is it possible to use web view as a html reader (offline)?是否可以将 Web 视图用作 html 阅读器(离线)?
【发布时间】:2017-03-21 19:44:03
【问题描述】:

我正在寻找一种方法来缩放我的布局中的文本和图片。 根据一些问题,网络视图是一种简单的方法。过了一会儿,我找到了 webview 的代码:

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class WebViewActivity extends Activity {

private WebView webView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);

    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("http://www.google.com");

}

}

我尝试使用file:/// 而不是http:// 所以我使用了这个路径:

file:///sdcard/Android/data/[My App Package Name]/about.html

它对我来说似乎工作正常,但我有一些严重的问题。

这是我的问题:

  1. 我使用的这条路径是否适用于所有其他安卓设备?
  2. 我不知道如何提取 html 文件以便第一次运行到我正在使用的路径中。
  3. 是否可以从资产中加载文件?
  4. 第一次运行解压文件的源代码是什么?
  5. 我可以使用其他格式,如 pdf 或 doc 来代替 html 吗?如果我无法更改源代码中的哪些内容?

感谢大家帮助我。我应该放弃还是继续这个想法?

【问题讨论】:

    标签: android html webview offline offline-web-app


    【解决方案1】:

    您可以将文件放入源代码中的 assets 文件夹中,然后执行以下操作:

    WebView webView = (WebView)findViewById(R.id.webView1);
    webview.loadUrl("file:///android_assets/file.html");
    

    用于显示 PDF:

    由于 API Level 21 (Lollipop) Android 提供了 PdfRenderer 类:

    // create a new renderer
    PdfRenderer renderer = new PdfRenderer(getSeekableFileDescriptor());
    
    // let us just render all pages
    final int pageCount = renderer.getPageCount();
    for (int i = 0; i < pageCount; i++) {
      Page page = renderer.openPage(i);
    
      // say we render for showing on the screen
      page.render(mBitmap, null, null, Page.RENDER_MODE_FOR_DISPLAY);
    
      // do stuff with the bitmap
    
      // close the page
      page.close();
    }
    
    // close the renderer
    renderer.close();
    

    此示例演示了how to display PDF document on screen using the PdfRenderer introduced in Android 5.0 Lollipop.

    对于较旧的 API,请查看 AndroidPdfViewer library,适用于 API 11 及更高版本:

    pdfView.fromUri(Uri)
    or
    pdfView.fromFile(File)
    or
    pdfView.fromAsset(String)
        .pages(0, 2, 1, 3, 3, 3) // all pages are displayed by default
        .enableSwipe(true)
        .swipeHorizontal(false)
        .enableDoubletap(true)
        .defaultPage(0)
        .onDraw(onDrawListener)
        .onLoad(onLoadCompleteListener)
        .onPageChange(onPageChangeListener)
        .onPageScroll(onPageScrollListener)
        .onError(onErrorListener)
        .enableAnnotationRendering(false)
        .password(null)
        .scrollHandle(null)
        .load();
    

    【讨论】:

    • 哦,所以要从资产加载文件,我应该添加 (android_assets) 而不是 (assets)。对吗?
    • 感谢您解决了我的第三个问题。我期待解决我的第五个问题。
    • i should add (android_assets)。不,那是行不通的。再看一遍;-)。
    • 它需要很高的api,所以蜂窝用户无法运行应用程序是不是?
    【解决方案2】:

    使用getExternalFilesDir() 代替硬编码路径。

    使用 IDE 将文件放入资产中。

    然后在运行时将这些文件复制到 getExternalFilesDir()。执行此操作的代码已在 stackoverflow 上多次发布。

    您也可以将文件保留在资产中,因为 WebView 可以直接从资产中加载它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 2016-10-25
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多