تحميل ملف .html الموجود باستخدام Android WebView
-
26-09-2019 - |
سؤال
لقد جربت العينات والعروض التوضيحية من رموز جوجل والموارد الأخرى معها 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