ภาพรวม
WebView ไม่มีการจัดการปุ่ม Back (Hardware/Software Back Button) อัตโนมัติ ต้อง Override onBackPressed() เพื่อให้ย้อนกลับหน้าเว็บได้ แทนที่จะปิดแอปทันที
โค้ดสำคัญ: Override onBackPressed
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// ... initialization code ...
webView = findViewById(R.id.web_view);
webView.setVerticalScrollBarEnabled(true);
webView.getSettings().setDefaultTextEncodingName("utf-8");
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("https://touch.facebook.com/");
// WebViewClient, WebChromeClient setup...
}
@Override
public void onBackPressed() {
if (webView != null && webView.canGoBack()) {
webView.goBack(); // ย้อนกลับหน้าเว็บก่อนหน้า
} else {
super.onBackPressed(); // ไม่มีหน้าก่อนหน้า -> ปิดแอป
}
}
การทำงานของ canGoBack() และ goBack()
canGoBack(): คืนค่า true ถ้ามีประวัติหน้าเว็บก่อนหน้าgoBack(): นำทางกลับหน้าก่อนหน้าในประวัติcanGoForward()/goForward(): สำหรับปุ่ม Forward (ถ้ามี)
เพิ่มปุ่ม Forward (Optional)
// ใน Toolbar หรือ Menu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_forward && webView.canGoForward()) {
webView.goForward();
return true;
}
return super.onOptionsItemSelected(item);
}
ข้อควรพิจารณา
- จัดการประวัติ (History) ให้เหมาะสม - ไม่ควรเก็บมากเกินไป
- ใช้
webView.clearHistory()เมื่อต้องการล้างประวัติ - ใน Android 13+ (API 33) พฤติกรรม Back Button อาจเปลี่ยนไป (Predictive Back)
Manifest
เพียง INTERNET permission เท่านั้น