سؤال

لقد جربت العينات والعروض التوضيحية من رموز جوجل والموارد الأخرى معها WebView, ، لكن عندما أحاول القيام بذلك في الكود الخاص بي ، فإنه لا يعمل بالنسبة لي.

اريد التحميل myfile.html الذي أضعه في مجلد الأصول ، واستخدام:

private WebView myWebView;

myWebView.loadUrl("file:///android_assets/myfile.html");

في المحاكي يظهر خطأ

صفحة الويب في file:///android_assets/myfile.html لا يمكن تحميلها على النحو التالي: لم يتم العثور على الملف المطلوب. /android_assets/myfile.html

عندما أضع هذا الملف res/raw/ المجلد واستخدام:

myWebView.loadUrl("file:///android_res/raw/myfile.html");

ثم يمكن فقط للمحاكي Android 2.2 API المستوى 8 تحميل الملف على الأرجح ، تُظهر الإصدارات القديمة الأخرى نفس الخطأ. هل فاتني شيء؟

هل هناك أي طريقة لتحميل ملف .html موجود في حزمة التطبيق التي تعمل على جميع إصدارات API؟

هل كانت مفيدة؟

المحلول

حسنًا ، كان هذا خطأي الغبي. أنشر الإجابة هنا فقط في حال كان لدى شخص ما نفس المشكلة.

المسار الصحيح للملفات المخزنة في مجلد الأصول هو file:///android_asset/* (مع عدم وجود مجلد "S" لـ Assets الذي كنت أفكر دائمًا أنه يجب أن يكون له "S").

و، mWebView.loadUrl("file:///android_asset/myfile.html"); يعمل تحت جميع مستويات API.

ما زلت غير معرفة لماذا mWebView.loadUrl("file:///android_res/raw/myfile.html"); يعمل فقط على مستوى API 8. لكنه لا يهم الآن.

نصائح أخرى

الصق ملف .html الخاص بك في مجلد الأصول من مجلد المشروع الخاص بك. وإنشاء ملف XML في مجلد تخطيط مع رمز fol: my.xml:

<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/webview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
    />

أضف رمز FOL في النشاط

setContentView(R.layout.my);
    WebView mWebView = null;
    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl("file:///android_asset/new.html"); //new.html is html file name.

إذا كان يجب أن يكون هيكلك هكذا:

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

ثم تفعل فقط ( Android WebView: تغييرات الاتجاه )

    if(WebViewStateHolder.INSTANCE.getBundle() == null) { //this works only on single instance of webview, use a map with TAG if you need more
        webView.loadUrl("file:///android_asset/html/index.html");
    } else {
        webView.restoreState(WebViewStateHolder.INSTANCE.getBundle());
    }

تأكد من إضافة

    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
        webSettings.setAllowFileAccessFromFileURLs(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
    }

ثم فقط استخدم عناوين URL

<html>
<head>
    <meta charset="utf-8">
    <title>Zzzz</title>
    <script src="../scripts/index.js"></script>
    <link rel="stylesheet" type="text/css" href="../css/index.css">

انسخ ولصق ملف .html الخاص بك في مجلد الأصول في مشروعك وأضف كودًا أدناه في نشاطك على OnCreate ().

        WebView view = new WebView(this);
        view.getSettings().setJavaScriptEnabled(true);
        view.loadUrl("file:///android_asset/**YOUR FILE NAME**.html");
        view.setBackgroundColor(Color.TRANSPARENT);
        setContentView(view);

يمكنك قراءة ملف HTML يدويًا ثم استخدامه loadData أو loadDataWithBaseUrl طرق WebView لإظهارها.

ال تجميع تصحيح يختلف عن إطلاق واحد ، هكذا:

النظر في بنية ملف مشروعك من هذا القبيل [هذه الحالة إذا تجمع التصحيح]:

src
  |
  debug
      |
      assets
           |
           index.html

يجب عليك استدعاء index.html في عرض الويب الخاص بك مثل:

WebView web=(WebView)findViewById(R.id.web);
web.loadUrl("file:///android_asset/index.html");

تخطيط:

<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top"/>

لذلك ، بالنسبة لتجميع الإصدار ، يجب أن يكون مثل:

src
  |
  release
        |
        assets
             |
             index.html  
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top