Android WebView 空白等待時加載動畫

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

 

以上就這麼多,如有錯誤或者不嚴謹的地方懇請指正,謝謝

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章