客戶端多個異常文案顯示方法
阿新 • • 發佈:2018-12-19
在實際開發中,針對某一介面,我們有不同的顯示需求:以app中的訊息列表為例,在網路有問題的情況下,我們介面顯示網路出現問題;在網路正常,但是沒有訊息資料的情況下,我們要求顯示,沒有訊息。這是常規的異常顯示案例。
但是,有時候為了減少Layout數量,我們不得不將一些異常情況都寫在一個介面。
新增異常佈局方法
1. include異常佈局
<include layout="@layout/viewtools_include_error_layout" android:layout_width="300dp" android:layout_height="300dp" android:layout_centerInParent="true" />
2. 將異常佈局可視性是為Gone
<RelativeLayout android:id="@+id/rl_empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:visibility="gone"> <android.support.v7.widget.AppCompatImageView android:id="@+id/iv_empty_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:background="@drawable/mine_no_message" /> <TextView android:id="@+id/tv_empty_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/iv_empty_icon" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" tools:text="內容載入失敗" />
然後在activity中,控制異常介面中對應控制元件的顯示。
3. 單佈局實現多個異常佈局
以上兩種方法都可以分別實現一種異常佈局的顯示,但是有沒有一種方法可以分別不同顯示兩種異常佈局呢?
答案是可以的,將異常佈局預設為網路異常情況,然後對於沒有資料情況,進行處理。
if (!CommonUtils.isNetWorkAvailable(this)) { DialogNewUtils.getInstance().showDialogToast(this, "網路出問題了,請檢查網路"); ivErrorIcon.setBackgroundResource(R.drawable.viewtools_icon_no_net); errRel.setVisibility(View.VISIBLE); empView.setText("網路出問題了,請檢查網路"); shopWeb.setVisibility(View.GONE); viewWhiteBg.setVisibility(View.GONE); LoadingDialogUtils.getInstance().dismissDialog(); }
在上面的程式碼中,最重要的是這行,設定圖片資源背景,通過載入無網路圖片實現一個佈局兩種異常。
ivErrorIcon.setBackgroundResource(R.drawable.viewtools_icon_no_net);
但是提及到載入圖片,就不得不說imageview設定資源圖片問題。
Imageview設定資源圖片
提及ImageView設定資源圖片,老生常談的話題是圖片變形問題和視窗適配問題。
1. 以背景的形式進行設定圖片
缺點 : 圖片容易變形
優點: 可以不用關心圖片的大小 直接填充窗體
image2.setBackground(getResources().getDrawable(R.drawable.blackk));
image2.setBackgroundResource(R.drawable.blackk);
image2.setBackgroundDrawable(getResources().getDrawable(R.drawable.blackk));
2. 以設定圖片的形式設定資源
缺點 : 與窗體不能完美結合
優點: 圖片不會變形
image2.setImageDrawable(getResources().getDrawable(R.drawable.blackk))
String path= Environment.getExternalStorageDirectory()+File.separator+"test1.jpg";
Bitmap bm = BitmapFactory.decodeFile(path);
image2.setImageBitmap(bm);//不會變形
image2.setImageResource(R.drawable.blackk);//不會變形
我們可以通過第一種方法,來實現單佈局實現多個異常佈局的需求。
【注意】這種方法僅使用於兩種異常顯示切圖長寬相近的情況,當長寬比不同時,會導致影象失真,過度變寬變長,影響顯示。此時可以用include或者gone顯示佈局的辦法,進行顯示,畢竟前端業務,產品和UI是大爺。
參考文獻