ogress_bar);
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress != 100) {
progressBar.setVisibility(View.VISIBLE);
progressBar.setProgress(newProgress);
} else {
progressBar.setVisibility(View.GONE);
}
}
});
“`
第三步:處理網站中的鏈接
當用戶在WebView中點擊網頁中的鏈接時,WebView默認會打開系統瀏覽器來顯示該鏈接內容。但在APP中,我們希望用戶始終在APP內部瀏覽網頁,因此需要攔截WebView中的鏈接。在WebView中添加以下代碼來實現這個功能:
“`java
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
“`
這段代碼中的shouldOverrideUrlLoading()方法會在用戶點擊鏈接時被調用,將目標鏈接加載到當前的WebView中。
第四步:添加上下文菜單
與網頁相比,APP的用戶體驗更加重視交互和操作,因此我們可以為WebView添加上下文菜單,以方便用戶進行一些常用操作,如復制鏈接或網頁內容。代碼如下:
“`java
webView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
HitTestResult result = webView.getHitTestResult();
if (result.getType() == HitTestResult.SRC_ANCHOR_TYPE) {
final String url = result.getExtra();
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
.setMessage(url)
.setPositiveButton(“復制鏈接”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
cm.setPrimaryClip(ClipData.newPlainText(null, url));
}
網站做app })
.setNegativeButton(“取消”, null)
.create();
dialog.show();
return true;
}
return false;
}
});
“`
這段代碼中的onLongClick()方法會在用戶長按WebView中的內容時被觸發,顯示一個對話框,其中列出了一些常用操作,如“復制鏈接”。
第五步:處理網站中的圖片等資源
有些網站中可能會包含一些圖片、視頻等資源,而WebView默認情況下并不會自動下載這些資源,需要我們自己來處理。
可以使用WebViewClient中的onPageFinished()方法來獲取網頁中的所有資源,并將其下載到本地存儲中。代碼如下:
“`java
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
new DownloadTask().execute(url);
}
});
class DownloadTask extends AsyncTask {
@Override
protected Void doInBackground(String… urls) {
try {
String url = urls[0];
Document doc = Jsoup.connect(url).get();
Elements elements = doc.getElementsByTag(“img”);
for (Element element : elements) {
String imgUrl = element.absUrl(“src”);
if (!imgUrl.startsWith(“http”)) {
continue;
}
String fileName = Paths.get(imgUrl).getFileName().toString();
File file = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), fileName);
URLConnection conn = new URL(imgUrl).openConnection();
InputStream in = conn.getInputStream();
OutputStream out = new FileOutputStream(file);
byte[] buffer = new byte[4096];
int len;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
out.close();
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
“`
這段代碼中使用了Jsoup庫來解析網頁內容,獲取其中的所有元素,并下載其中的圖片到本地存儲中。
最后,我們可以為APP添加一些其他的功能,如分享、收藏、設置等等,來增強APP的可用性和用戶體驗。
綜上所述,將一個網站做成APP可以通過WebView來實現。我們可以通過一系列的編程操作,實現網站內容的加載、鏈接的攔截、上下文菜單的添加、資源的下載等功能,從而讓用戶可以方便地在APP中瀏覽目標網站。