WebView 加載判斷 和 加載動畫的簡單實現
WebView 在加載網頁時候,在網絡不好的情況下,如果不做處理會出現一段時間的等待空白,用戶體驗差。所以有必要加上一個簡單的加載進度提示。本編簡單的運用了ProgressDialog 這個控件來實現。
下面是簡單的代碼片段
<span style="color:#ff6666;"><</span>?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:background="@color/colorPrimaryDark"
android:popupTheme="@style/AppTheme.PopupOverlay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
>
<ImageView
android:id="@+id/faq_activity_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/back"/>
<TextView
android:id="@+id/faq_activity_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textColor="@color/white"
android:textSize="22sp"
android:text="常見問題"
/>
</android.support.v7.widget.Toolbar>
<WebView
android:id="@+id/faq_webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
下面貼上部分代碼
public class FAQActivity extends BaseActivity {
private final String TAG = FAQActivity.class.getName();
@BindView(R.id.activity_fap_back)
ImageView activityFapBack;
@BindView(R.id.activity_faq_webview)
WebView webView;
private String FAQ_BASE_URL = "";
/***
*
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_faq);
ButterKnife.bind(this);
init();
}
private void init() {
webView.loadUrl("你的請求地址");
WebSettings mWebSettings = webView.getSettings();
mWebSettings.setSupportZoom(true);
mWebSettings.setLoadWithOverviewMode(true);
mWebSettings.setUseWideViewPort(true);
mWebSettings.setDefaultTextEncodingName("GBK");//設置解碼格式
mWebSettings.setLoadsImagesAutomatically(true);
mWebSettings.setJavaScriptEnabled(true);//支持js 特效
//覆蓋WebView默認使用第三方或系統默認瀏覽器打開網頁的行爲,使網頁用WebView打開
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
//返回值是true的時候控制去WebView打開,爲false調用系統瀏覽器或第三方瀏覽器
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
showProgress("頁面加載中");//開始加載動畫
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
removeProgress();//當加載結束時移除動畫
}
});
}
/**
* 點擊事件
*/
@OnClick(R.id.activity_fap_back)
public void onClick() {
Log.d(TAG, "onClick: ");
jumpToActivity(FAQActivity.this,MenuActivity.class);
}
/**
* 返回鍵的監聽事件
*
* @param keyCode
* @param event
* @return
*/
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
jumpToActivity(FAQActivity.this,MenuActivity.class);
}
return false;
}
}
需要注意的地方:
ProgressDIalog 控件爲了不寫重複代碼,我進行了簡單的封裝。下面是我簡單封裝的BaseActivity代碼
public class BaseActivity extends AppCompatActivity {
private final String TAG = BaseActivity.class.getName();
private Toast toast = null;
private ProgressDialog progressDialog;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/**
* @param context 上下文對象
* @param start 其實activity
* @param target 目標activity
*/
public void jumpToActivity(Context context, Class start, Class target) {
Intent intent = new Intent(context, target);
//------用戶返回上一級activity
if (target == CarFindingActivity.class) {
intent.putExtra("activity", start);
}
context.startActivity(intent);
finish();
}
public void jumpToActivity(Context context, Class target) {
Intent intent = new Intent(context, target);
//------用戶返回上一級activity
context.startActivity(intent);
finish();
}
/**
* @param context
* @param text
*/
public void showToastLong(Context context, String text) {
if (toast == null) {
toast = Toast.makeText(context, text, Toast.LENGTH_LONG);
} else {
toast.setText(text);
}
toast.show();
}
public void showToastLong(String text) {
if (toast == null) {
toast = Toast.makeText(BaseActivity.this, text, Toast.LENGTH_LONG);
} else {
toast.setText(text);
}
toast.show();
}
/**
* @param context
* @param text
*/
public void showToastShort(Context context, String text) {
if (toast == null) {
toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
} else {
toast.setText(text);
}
toast.show();
}
public void showToastShort(String text) {
if (toast == null) {
toast = Toast.makeText(BaseActivity.this, text, Toast.LENGTH_SHORT);
} else {
toast.setText(text);
}
toast.show();
}
//-----顯示ProgressDialog
public void showProgress(String message) {
if (progressDialog == null) {
progressDialog = new ProgressDialog(BaseActivity.this, ProgressDialog.STYLE_SPINNER);
progressDialog.setCancelable(false);//設置點擊不消失
}
if (progressDialog.isShowing()) {
progressDialog.setMessage(message);
} else {
progressDialog.setMessage(message);
progressDialog.show();
}
}
//------取消ProgressDialog
public void removeProgress(){
if (progressDialog==null){
return;
}
if (progressDialog.isShowing()){
progressDialog.dismiss();
}
}
/**
*
*/
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
protected void onStop() {
removeProgress();//讓progressdialog 消失
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart: ");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
}
然後繼承BaseActivtiy 直接調用裏面
showProgress(String message)
顯示ProgressDialog
removeProgress()
移除ProgressDialog
以上就這麼多,如有錯誤或者不嚴謹的地方懇請指正,謝謝