Trung tâm của trình duyệt web Android là Widget WebView, bao gồm WebKit.
Đầu tiên, tệp bố cục activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center" >
<Button
android:id="@+id/btnBackTwo"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="<<" />
<Button
android:id="@+id/btnBackOne"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="<" />
<Button
android:id="@+id/btnForwardOne"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text=">" />
<Button
android:id="@+id/btnForwardTwo"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text=">>" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp" >
<EditText
android:id="@+id/edtUrl"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="5"
android:ems="10"
android:singleLine="true" >
<requestFocus />
</EditText>
<Button
android:id="@+id/btnLoad"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Tải" />
</LinearLayout>
<WebView
android:id="@+id/webViewMain"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
Tệp bố cục này khá đơn giản, bao gồm một số nút, một EditText và một WebView.
Tệp Java MainActivity.java:
package com.example.mybrowser;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements OnClickListener {
// Các thành phần giao diện
Button btnBackTwo, btnBackOne, btnForwardOne, btnForwardTwo, btnLoad;
EditText edtUrl;
WebView webViewMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Khởi tạo các thành phần giao diện
initializeViews();
webViewMain.setWebViewClient(new CustomWebViewClient());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// Khởi tạo các thành phần giao diện
private void initializeViews() {
btnBackTwo = findViewById(R.id.btnBackTwo);
btnBackOne = findViewById(R.id.btnBackOne);
btnForwardOne = findViewById(R.id.btnForwardOne);
btnForwardTwo = findViewById(R.id.btnForwardTwo);
edtUrl = findViewById(R.id.edtUrl);
btnLoad = findViewById(R.id.btnLoad);
webViewMain = findViewById(R.id.webViewMain);
btnBackTwo.setOnClickListener(this);
btnBackOne.setOnClickListener(this);
btnForwardOne.setOnClickListener(this);
btnForwardTwo.setOnClickListener(this);
edtUrl.setOnClickListener(this);
btnLoad.setOnClickListener(this);
// Cho phép JavaScript
webViewMain.getSettings().setJavaScriptEnabled(true);
webViewMain.setScrollBarStyle(View.SCROLLBAR_POSITION_DEFAULT);
}
@Override
public void onClick(View v) {
if (v == btnBackTwo) {
if (webViewMain.canGoBackOrForward(-2)) {
webViewMain.goBackOrForward(-2);
}
} else if (v == btnBackOne) {
if (webViewMain.canGoBack()) {
webViewMain.goBack();
}
} else if (v == btnForwardOne) {
if (webViewMain.canGoForward()) {
webViewMain.goForward();
}
} else if (v == btnForwardTwo) {
if (webViewMain.canGoBackOrForward(2)) {
webViewMain.goBackOrForward(2);
}
} else if (v == btnLoad) {
String url = edtUrl.getText().toString();
webViewMain.loadUrl("http://" + url);
}
}
// Lớp xử lý WebViewClient
private class CustomWebViewClient extends WebViewClient {
@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
btnBackOne.setEnabled(webViewMain.canGoBack());
btnForwardOne.setEnabled(webViewMain.canGoForward());
}
@Override
public void onPageFinished(WebView view, String url) {
if (webViewMain.getTitle() != null) {
setTitle(webViewMain.getTitle());
}
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
setTitle(url);
edtUrl.setText(url);
btnBackOne.setEnabled(webViewMain.canGoBack());
btnForwardOne.setEnabled(webViewMain.canGoForward());
}
}
}
Tệp Java chủ yếu xử lý các thao tác với WebView. Lớp CustomWebViewClient kế thừa từ WebViewClient, chứa các phương thức như cập nhật lịch sử truy cập, hoàn thành tải trang, và bắt đầu tải trang.
Câu lệnh webViewMain.setWebViewClient(new CustomWebViewClient()) tạo một instance của CustomWebViewClient làm trình duyệt. Nếu không có dòng này, hệ thống sẽ sử dụng trình duyệt mặc định đã cài đặt trên thiết bị.
Khi nhấn nút "Tải", hàm loadUrl được gọi để tải trang web.
Cuối cùng, cần thêm quyền truy cập internet trong tệp Manifest để có thể mở trang web.