切換不同的資料狀態佈局,包含載入中、空資料和出錯狀態(利用開源框架)
阿新 • • 發佈:2019-05-11
implementation 'com.github.Bakumon:StatusLayoutManager:1.0.4'
將要動態載入的佈局用SwipeRefreshLayout包含,佈局如下
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/act_index_srl" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/act_webview_wv" android:layout_width="match_parent" android:layout_height="match_parent" > </WebView> </android.support.v4.widget.SwipeRefreshLayout>
Java類,通過webView載入完成後,改變頁面狀態
@Override
public void initView() {
setContentView(R.layout.act_index_web);
Intent intent = getIntent();
String strUrl = intent.getStringExtra("index");
webView = findViewById(R.id.act_webview_wv);
webView.loadUrl(strUrl);
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
statusLayoutManager.showSuccessLayout();
}
});
setWebInit();
initSRL();
}
private void initSRL() {
swipeRefresh = findViewById(R.id.act_index_srl);
swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swipeRefresh.setRefreshing(false);
}
});
statusLayoutManager = new StatusLayoutManager.Builder(swipeRefresh)
.setOnStatusChildClickListener(new OnStatusChildClickListener() {
@Override
public void onEmptyChildClick(View view) {
// Toast.makeText(indexViewActivity.this, R.string.reload_empty, Toast.LENGTH_SHORT).show();
statusLayoutManager.showLoadingLayout();
// getData(1000);
}
@Override
public void onErrorChildClick(View view) {
// Toast.makeText(MainActivity.this, R.string.reload_error, Toast.LENGTH_SHORT).show();
statusLayoutManager.showLoadingLayout();
// getData(1000);
}
@Override
public void onCustomerChildClick(View view) {
// if (view.getId() == R.id.tv_customer) {
//// Toast.makeText(MainActivity.this, R.string.request_access, Toast.LENGTH_SHORT).show();
// } else if (view.getId() == R.id.tv_customer1) {
//// Toast.makeText(MainActivity.this, R.string.switch_account, Toast.LENGTH_SHORT).show();
// }
}
})
.build();
statusLayoutManager.showLoadingLayout();
// statusLayoutManager.showSuccessLayout();
}
@Override
public String setTitleText() {
return "微博主頁";
}
public void setWebInit() {
/* 設定支援Js,必須設定的,不然網頁基本上不能看 */
webView.getSettings().setJavaScriptEnabled(true);
/* 設定快取模式,我這裡使用的預設,不做多講解 */
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
/* 設定為true表示支援使用js開啟新的視窗 */
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
/* 大部分網頁需要自己儲存一些資料,這個時候就的設定下面這個屬性 */
webView.getSettings().setDomStorageEnabled(true);
/* 設定為使用webview推薦的視窗 */
webView.getSettings().setUseWideViewPort(true);
/* 設定網頁自適應螢幕大小 ---這個屬性應該是跟上面一個屬性一起用 */
webView.getSettings().setLoadWithOverviewMode(true);
/* HTML5的地理位置服務,設定為true,啟用地理定位 */
webView.getSettings().setGeolocationEnabled(true);
/* 設定是否允許webview使用縮放的功能,我這裡設為false,不允許 */
webView.getSettings().setBuiltInZoomControls(false);
/* 提高網頁渲染的優先順序 */
webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
/* 設定顯示水平滾動條,就是網頁右邊的滾動條.我這裡設定的不顯示 */
webView.setHorizontalScrollBarEnabled(false);
/* 指定垂直滾動條是否有疊加樣式 */
webView.setVerticalScrollbarOverlay(true);
/* 設定滾動條的樣式 */
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
/* 這個不用說了,重寫WebChromeClient監聽網頁載入的進度,從而實現進度條 */
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setDomStorageEnabled(true);
}