編輯:關於Android編程
WebView是安卓提供顯示web界面的工具類,可以像PC端的浏覽器那樣進行顯示:
大致就是上圖那樣。其實也可以不用WebView,簡單的三行代碼就可以在安卓App上顯示網頁界面。
示例
Uri uri = Uri.parse("http://www.baidu.com");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
運行效果:
使用WebView
布局文件
主活動
package com.xieth.as.webviewdemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebView;
public class MainActivity extends AppCompatActivity {
private WebView webView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
webView.loadUrl("http://www.baidu.com");
}
private void initViews() {
webView = (WebView) findViewById(R.id.id_webView);
}
}
但是結果:
記住要添加訪問網絡權限
OK,現在可以了
可以看到有選擇浏覽器的對話框。其實我們可以通過代碼來指定浏覽器來顯示,不需要再次選擇。
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
運行效果:
可以看到沒有出現那個選擇框了。默認是安卓設備自帶的浏覽器,而不是第三方的。
WebView中使用JavaScript
// 啟用支持JavaScript
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
但是有一個不好的用戶體驗。
在我們浏覽一個頁面,再次進入另外一個頁面的時候,點擊返回鍵,重新回到上次頁面的時候,
但是卻退出了,這是一個非常不好的用戶體驗。
可以通過代碼進行改善。
// 重寫方法使之可以返回上次的頁面
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (webView.canGoBack()) { // 判斷當前頁面是否處於首部
webView.goBack();// 返回上一頁面
return true;
} else { // 如果當前頁面是第一個頁面
System.exit(0); // 退出程序
}
}
return super.onKeyDown(keyCode, event);
}
效果:
這樣就OK了
判斷網頁的加載過程
在使用浏覽器訪問網頁的時候,有時候會加載慢,有時候會很快,所以為了給用戶更加良好的體驗,
我們可以通過進度條的方式來進行展示。
// 進度條顯示網頁的加載過程
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
// 加載完畢
closeDialog(newProgress);
} else {
openDialog(newProgress);
}
super.onProgressChanged(view, newProgress);
}
private void openDialog(int newProgress) {
if (dialog == null) {
dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("正在加載");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(newProgress);
dialog.show();
} else {
dialog.setProgress(newProgress);
}
}
private void closeDialog(int newProgress) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
dialog = null;
}
}
});
運行:
WebView使用緩存優化<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4NCjxwcmUgY2xhc3M9"brush:java;">
完整代碼 // 優先使用緩存優化效率
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
package com.xieth.as.webviewdemo;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView = null;
private ProgressDialog dialog = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
webView.loadUrl("http://www.baidu.com");
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
// 啟用支持JavaScript
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
// 進度條顯示網頁的加載過程
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
// 加載完畢
closeDialog(newProgress);
} else {
openDialog(newProgress);
}
super.onProgressChanged(view, newProgress);
}
private void openDialog(int newProgress) {
if (dialog == null) {
dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("正在加載");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(newProgress);
dialog.show();
} else {
dialog.setProgress(newProgress);
}
}
private void closeDialog(int newProgress) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
dialog = null;
}
}
});
// 優先使用緩存優化效率
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
// 重寫方法使之可以返回上次的頁面
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (webView.canGoBack()) { // 判斷當前頁面是否處於首部
webView.goBack();// 返回上一頁面
return true;
} else { // 如果當前頁面是第一個頁面
System.exit(0); // 退出程序
}
}
return super.onKeyDown(keyCode, event);
}
private void initViews() {
webView = (WebView) findViewById(R.id.id_webView);
}
}
上一篇已經帶大家實現了自由的放大縮小圖片,簡單介紹了下Matrix;具體請參考:Android實現手勢滑動多點觸摸縮放平移圖片效果,本篇繼續完善我們的ImageView。
說到圖片,第一反映就是bitmap,那就先來認識一下bitmapBitmap是Android系統中的圖像處理的最重要類之一。用它可以獲取圖像文件信息,進行圖像剪切、旋轉、
有很多機油刷了miui後恢復的時候經常會遇到:檢查modem內部版本失敗 modem內部版本不匹配。遇到這種情況解決方法很簡單,下面來分享下經驗:找到線刷工
1、Fragment的靜態使用Fragment是作為Activity的UI的一部分,它內嵌在Activity中,多個Fragment可以把一個Activity分成多個部分