การสร้าง WebView เพื่อแสดงเว็บไซต์ในแอป Android
ตัวอย่างนี้สาธิตวิธีใช้ WebView โหลดเว็บไซต์ เปิดใช้งาน JavaScript และจัดการปุ่ม Back เพื่อย้อนกลับใน WebView
ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่
เปิด Android Studio เลือก File → New Project และกรอกข้อมูลที่จำเป็น
ขั้นตอนที่ 2: จัดทำ Layout (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:id="@+id/parent"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
ขั้นตอนที่ 3: เขียนโค้ดหลัก (src/MainActivity.java)
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
// ตั้งค่า WebViewClient เพื่อเปิดลิงก์ภายใน WebView (ไม่เปิด Browser ภายนอก)
webView.setWebViewClient(new WebViewClient());
// โหลด URL
webView.loadUrl("https://www.google.com");
// ตั้งค่า WebSettings
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true); // เปิด JavaScript
webSettings.setDomStorageEnabled(true); // รองรับ localStorage
webSettings.setLoadWithOverviewMode(true); // ปรับขนาดให้พอดีหน้าจอ
webSettings.setUseWideViewPort(true); // ใช้ viewport กว้าง
webSettings.setBuiltInZoomControls(true); // เปิด zoom controls
webSettings.setDisplayZoomControls(false); // ซ่อนปุ่ม zoom บนหน้าจอ
webSettings.setSupportMultipleWindows(false); // ไม่เปิดหน้าต่างใหม่
webSettings.setJavaScriptCanOpenWindowsAutomatically(false);
}
@Override
public void onBackPressed() {
// กดปุ่ม Back: ถ้า WebView ย้อนกลับได้ ให้ย้อนใน WebView, ไม่เช่นนั้นปิด Activity
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
@Override
protected void onDestroy() {
// ทำความสะอาด WebView เพื่อป้องกัน Memory Leak
if (webView != null) {
webView.destroy();
webView = null;
}
super.onDestroy();
}
}
ขั้นตอนที่ 4: กำหนด Permission และ Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<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>
การทดสอบ
รันแอปพลิเคชัน จะโหลด Google.com ใน WebView สามารถเลื่อน, ซูม, คลิกลิงก์ได้


การตั้งค่า WebSettings สำคัญ
| การตั้งค่า | คำอธิบาย |
|---|---|
setJavaScriptEnabled(true) |
เปิด/ปิด JavaScript (จำเป็นสำหรับเว็บสมัยใหม่) |
setDomStorageEnabled(true) |
รองรับ localStorage/sessionStorage |
setAllowFileAccess(true) |
อนุญาตเข้าถึงไฟล์ในอุปกรณ์ |
setAllowContentAccess(true) |
อนุญาตเข้าถึง Content Provider |
setMixedContentMode() |
จัดการ Mixed Content (HTTP ใน HTTPS) |
setUserAgentString() |
กำหนด User Agent |
setCacheMode() |
โหมดแคช (LOAD_DEFAULT, LOAD_CACHE_ONLY, ฯลฯ) |
WebViewClient vs WebChromeClient
- WebViewClient: จัดการการนำทาง (navigation), loading, errors, SSL errors
- WebChromeClient: จัดการ UI ของ Browser: title, progress, favicon, JavaScript dialogs (alert, confirm, prompt), console messages
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
// อัปเดต ProgressBar
}
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
// จัดการ JavaScript alert()
return super.onJsAlert(view, url, message, result);
}
});
⚠️ ความปลอดภัย
- ไม่เปิด JavaScript หากไม่จำเป็น
- ตรวจสอบ URL ก่อนโหลด (prevent phishing)
- ใช้
setSafeBrowsingEnabled(true)(API 27+) - Clear cache/data เมื่อ logout