Android WebView được sử dụng để hiển thị HTML trong một ứng dụng Android. Chúng tôi có thể sử dụng Android Webview để tải trang HTML vào ứng dụng Android.
Android Webview
Thành phần Android WebView là một trình duyệt chính thức được triển khai dưới dạng lớp con
WebView webView = [WebView] findViewById[R.id.webview];
4 để nhúng nó vào ứng dụng Android của chúng tôi.Tầm quan trọng của Android Webview
Đối với mã HTML bị giới hạn về phạm vi, chúng ta có thể triển khai phương thức tĩnh
WebView webView = [WebView] findViewById[R.id.webview];
5 thuộc nhóm tiện ích HTML để phân tích chuỗi được định dạng HTML và hiển thị nó trong WebView webView = [WebView] findViewById[R.id.webview];
6. WebView webView = [WebView] findViewById[R.id.webview];
6 có thể hiển thị các định dạng đơn giản như các kiểu [in đậm, in nghiêng, v.v.], mặt phông chữ [serif, sans serif, v.v.], màu sắc, liên kết, v.v. Tuy nhiên, khi nói đến định dạng phức tạp và phạm vi lớn hơn về HTML, thì TextView không xử lý tốt. Ví dụ, việc duyệt Facebook đã giành chiến thắng thông qua một văn bản. Trong những trường hợp như vậy, WebView webView = [WebView] findViewById[R.id.webview];
8 sẽ là tiện ích phù hợp hơn, vì nó có thể xử lý một phạm vi thẻ HTML rộng hơn nhiều. WebView cũng có thể xử lý CSS và JavaScript, mà WebView webView = [WebView] findViewById[R.id.webview];
9 chỉ đơn giản là bỏ qua. WebView cũng có thể hỗ trợ các phép ẩn dụ duyệt web phổ biến, chẳng hạn như danh sách lịch sử của các URL đã truy cập để hỗ trợ điều hướng ngược và chuyển tiếp. Vẫn là WebView đi kèm với bộ khuyết điểm của riêng mình như nó là một tiện ích đắt tiền hơn nhiều để sử dụng, về mặt tiêu thụ bộ nhớ so với TextView. Lý do cho bộ nhớ tăng này là do WebView được cung cấp bởi WebKit/Blink là công cụ kết xuất web nguồn mở để cung cấp năng lượng trong các trình duyệt như Chrome.WebView can also handle CSS and JavaScript, which WebView webView = [WebView] findViewById[R.id.webview];
9 would simply ignore. WebView can also assist with common browsing metaphors, such as history list of visited URLs to support backwards and forwards navigation. Still WebView comes with its own set of cons such as it’s a much more expensive widget to use, in terms of memory consumption than a TextView. The reason for this increased memory is because WebView is powered by
WebKit/Blink that are open source Web rendering engine to power content in browsers like Chrome.Ví dụ Android WebView
Thành phần Android WebView được chèn vào tệp Bố cục XML cho bố cục, chúng tôi muốn WebView được hiển thị. Trong ví dụ này, chúng tôi chèn nó vào tệp
webView.loadUrl["//www.journaldev.com"];
0 như hiển thị bên dưới:
Mã WebView Android Studio
Thành phần WebView được khởi tạo trong
webView.loadUrl["//www.journaldev.com"];
1 bằng ID của nó được xác định trong webView.loadUrl["//www.journaldev.com"];
0 như được hiển thị trong đoạn trích bên dưới:WebView webView = [WebView] findViewById[R.id.webview];
Android WebView LoadURL
Khi chúng tôi đã thu được một tham chiếu đến WebView, chúng tôi có thể định cấu hình nó và tải URL qua HTTP. Phương thức WebView
webView.loadUrl["//www.journaldev.com"];
3 được sử dụng để tải URL vào WebView như được hiển thị bên dưới:webView.loadUrl["//www.journaldev.com"];
Trước khi chúng ta bắt đầu đùa giỡn với URL, có hai khía cạnh quan trọng, chúng ta nên xem xét:
Hỗ trợ JavaScript: JavaScript theo mặc định đã tắt trong các tiện ích WebView. Do đó các trang web có chứa các tài liệu tham khảo JavaScript won hoạt động đúng cách. Để bật tập lệnh Java, cần phải gọi đoạn trích sau đây trên phiên bản WebView:: JavaScript is by default turned off in WebView widgets. Hence web pages containing javascript references won’t work properly. To enable java script the following snippet needs to be called on the webview instance:
getSettings[].setJavaScriptEnabled[true];
Thêm quyền: Để tìm nạp và tải các URL trong WebView, chúng tôi cần thêm các quyền để truy cập Internet từ bên trong ứng dụng khác mà nó đã giành được để có thể tải các trang web. Dòng mã sau đây cần được thêm vào trong tệp
4 phía trên thẻ ứng dụng như được hiển thị bên dưới:: To fetch and load the urls in the WebView we need to add permissions to access the internet from within the app else it won’t be able to load the webpages. The following line of code needs to be added in thewebView.loadUrl["//www.journaldev.com"];
4 file above the application tag as shown below:webView.loadUrl["//www.journaldev.com"];
Lớp chính dưới đây chứa tất cả các tính năng được thảo luận cho đến bây giờ.
package com.journaldev.webview;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class MainActivity extends Activity {
@Override
protected void onCreate[Bundle savedInstanceState] {
super.onCreate[savedInstanceState];
setContentView[R.layout.activity_main];
WebView webView = [WebView] findViewById[R.id.webview];
WebSettings webSettings = webView.getSettings[];
webSettings.setJavaScriptEnabled[true];
webView.loadUrl["//www.journaldev.com"];
}
}
Đặt WebViewClient
Hành vi mặc định khi người dùng nhấp vào liên kết bên trong trang web là mở ứng dụng trình duyệt mặc định của hệ thống. Điều này có thể phá vỡ trải nghiệm người dùng của người dùng ứng dụng. Để giữ điều hướng trang trong WebView và do đó trong ứng dụng, chúng tôi cần tạo một lớp con là
webView.loadUrl["//www.journaldev.com"];
5 và ghi đè phương thức webView.loadUrl["//www.journaldev.com"];
6 của nó. Dưới đây là cách một lớp con WebViewClient như vậy sẽ trông như thế nào:private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading[WebView webView, String url] {
return false;
}
}
Khi phương thức
webView.loadUrl["//www.journaldev.com"];
7 trả về sai, các URL được truyền dưới dạng tham số cho phương thức được tải bên trong WebView thay vì trình duyệt. Để phân biệt giữa các URL được tải trong ứng dụng và trình duyệt, mã sau cần được thêm vào trong phương thức offOverRideUrlLoading []:if[url.indexOf["journaldev.com"] > -1 ] return false;
return true;
Lưu ý: Trả về True doesn không có nghĩa là URL mở trong ứng dụng trình duyệt. Trong thực tế, URL won đã được mở ra. Để tải URL vào trình duyệt, một ý định cần phải bắn. Các lớp con sau đây chứa tất cả các cấu hình mà chúng tôi đã thêm.: Returning true doesn’t signify that the url opens in the browser app. In fact the url won’t be opened at all. To load the url into the browser an intent needs to fired. The following subclass contains all the configurations we’ve added.
package com.journaldev.webview;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebViewClientImpl extends WebViewClient {
private Activity activity = null;
public WebViewClientImpl[Activity activity] {
this.activity = activity;
}
@Override
public boolean shouldOverrideUrlLoading[WebView webView, String url] {
if[url.indexOf["journaldev.com"] > -1 ] return false;
Intent intent = new Intent[Intent.ACTION_VIEW, Uri.parse[url]];
activity.startActivity[intent];
return true;
}
}
Trình xây dựng lấy hoạt động như một tham số để bắn một ý định trong trình duyệt. Trước khi khởi tạo lớp con này trong MainActivity, hãy xem xét một tính năng quan trọng khác.
Điều hướng Webview với nút quay lại
Nếu chúng tôi nhấp vào nút quay lại trong ứng dụng được phát triển cho đến nay, chúng tôi sẽ thấy ứng dụng trở lại màn hình chính mặc dù chúng tôi đã điều hướng qua một vài trang trong chính WebView. Để xem qua lịch sử duyệt web khi nhấn nút quay lại, chúng tôi cần sửa đổi chức năng nút quay lại như trong đoạn trích bên dưới:
@Override
public boolean onKeyDown[int keyCode, KeyEvent event] {
if [[keyCode == KeyEvent.KEYCODE_BACK] && this.webView.canGoBack[]] {
this.webView.goBack[];
return true;
}
return super.onKeyDown[keyCode, event];
}
Phương thức OnKeyDown [] đã được ghi đè với một triển khai trước tiên kiểm tra xem WebView có thể quay lại không. Nếu người dùng đã điều hướng ra khỏi trang đầu tiên được tải bên trong WebView, thì WebView có thể quay lại. WebView duy trì một lịch sử duyệt web giống như một trình duyệt thông thường. Nếu không có lịch sử thì nó sẽ dẫn đến hành vi mặc định của nút quay lại, tức là thoát khỏi ứng dụng. Sau đây là mã cho
webView.loadUrl["//www.journaldev.com"];
1 với các tính năng trên bao gồm.WebView webView = [WebView] findViewById[R.id.webview];
0Hình ảnh dưới đây cho thấy đầu ra được tạo bởi dự án của chúng tôi, bạn có thể thấy rằng WebView được tải với một URL được chỉ định trước.
Các lựa chọn thay thế để tải nội dung trong WebView
Cho đến bây giờ, chúng tôi chỉ sử dụng phương thức LoadUrl [] để tải nội dung trong WebView. Ở đây, chúng tôi sẽ thấy các cách khác để tải nội dung sau khi tóm tắt nhanh các cách sử dụng của loadUrl []. loadUrl [] hoạt động với:
- // và // urls
- Tệp: // URL chỉ vào hệ thống tập tin cục bộ
- Tệp: /// Android_asset/URL chỉ vào một trong các tài sản ứng dụng của bạn
- Nội dung: // URL chỉ vào
9 đang xuất bản nội dung có sẵn để phát trực tuyếnwebView.loadUrl["//www.journaldev.com"];
Thay vì LoadUrl [], chúng ta có thể sử dụng LoadData [] mà theo đó chúng ta có thể hiển thị các đoạn trích hoặc toàn bộ mã HTML trong phương thức. Có hai hương vị của loaddata []. Cái đơn giản hơn cho phép chúng tôi cung cấp nội dung, loại MIME và mã hóa, tất cả là chuỗi. Thông thường, loại MIME sẽ là văn bản/HTML và mã hóa sẽ là UTF-8 cho HTML thông thường như hình dưới đây:
WebView webView = [WebView] findViewById[R.id.webview];
1Dưới đây là đầu ra khi đoạn trích trên được thêm vào trong tính toán chính như hình dưới đây:
WebView webView = [WebView] findViewById[R.id.webview];
2WebView webView = [WebView] findViewById[R.id.webview];
3Điều này mang lại kết thúc cho hướng dẫn ví dụ Android WebView. Bạn có thể tải xuống dự án Android Webview cuối cùng từ liên kết bên dưới.android webview project from below link.
Tải xuống Dự án ví dụ Android WebView