1. 程式人生 > >客戶端多個異常文案顯示方法

客戶端多個異常文案顯示方法

      在實際開發中,針對某一介面,我們有不同的顯示需求:以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是大爺。

參考文獻