WebView-এ লোকাল HTML ফাইল লোড করা (Assets ফোল্ডার থেকে)
অ্যাপের assets ফোল্ডারে থাকা HTML, CSS, JS ফাইলগুলো file:///android_asset/ URI স্কিম ব্যবহার করে WebView-এ লোড করার পদ্ধতি।
ধাপ ১: প্রজেক্ট তৈরি
Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
ধাপ ৩: Assets ফোল্ডার ও HTML ফাইল তৈরি
- Project 뷰-এ
mainরাইট-ক্লিক → New → Folder → Assets Folder assetsফোল্ডারে রাইট-ক্লিক → New → File →mytext.html
mytext.html কন্টেন্ট:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Assets HTML</title>
<style>
body { font-family: sans-serif; padding: 20px; line-height: 1.6; }
h1 { color: #2196F3; }
h2 { color: #4CAF50; }
</style>
</head>
<body>
<h1>This HTML file is loaded from the assets folder</h1>
<h2>Have a nice Day!</h2>
<p>You can include CSS, JavaScript, images (in assets subfolders) here.</p>
<button onclick="alert('JS works!')">Test JavaScript</button>
</body>
</html>
ধাপ ৪: MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebSettings;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = findViewById(R.id.webView);
WebSettings settings = webView.getSettings();
// জাভাস্ক্রিপ্ট সক্ষম (যদি HTML-এ JS থাকে)
settings.setJavaScriptEnabled(true);
// জুম কন্ট্রোল (ঐচ্ছিক)
settings.setBuiltInZoomControls(true);
settings.setDisplayZoomControls(false);
// Assets থেকে HTML লোড
webView.loadUrl("file:///android_asset/mytext.html");
}
}
ধাপ ৫: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.webviewassets">
<application ...>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Assets ফোল্ডার স্ট্রাকচার
app/
└── src/
└── main/
└── assets/
├── mytext.html
├── css/
│ └── style.css
├── js/
│ └── script.js
└── images/
└── logo.png
HTML-এ রিলেটিভ পাথ ব্যবহার
<!-- CSS --> <link rel="stylesheet" href="css/style.css"> <!-- JS --> <script src="js/script.js"></script> <!-- Image --> <img src="images/logo.png" alt="Logo">
নোট: Assets-এ ফাইল পাথ কেস-সেনসিটিভ। সাবফোল্ডার ব্যবহার করলে HTML-এ রিলেটিভ পাথ দিন।
সীমাবদ্ধতা ও সমাধান
| সমস্যা | সমাধান |
|---|---|
| CSS/JS লোড হয় না | WebViewClient সেট করুন, mixed content allow করুন |
| বড় ফাইল লোড ধীর | WebViewClient.onPageFinished-এ জাভাস্ক্রিপ্ট এক্সিকিউট করুন |
| লোকাল ফাইল থেকে AJAX | CORS এরর - WebView.setAllowFileAccessFromFileURLs(true) (API 16+) |
| ফন্ট লোড | CSS @font-face-এ file:///android_asset/fonts/font.ttf ব্যবহার করুন |
সিকিউরিটি নোট
- Assets ফাইলগুলো রিড-অনলি, রানটাইমে মডিফাই করা যায় না
- সংবেদনশীল ডেটা (API Key, Token) Assets-এ রাখবেন না
- WebView-এ
setAllowFileAccess(false)রাখুন যদি এক্সটার্নাল ফাইল অ্যাক্সেস দরকার নাই