1. 前言
? ? ? ?在實際開發中,針對某一界面,我們有不同的顯示需求:以app中的消息列表為例,在網絡有問題的情況下,我們界面顯示網絡出現問題;在網絡正常,但是沒有消息數據的情況下,我們要求顯示,沒有消息。這是常規的異常顯示案例。 但是,有時候為了減少Layout數量,我們不得不將一些異常情況都寫在一個界面,這也是本文探究的主題。
2. 常用的添加異常布局方法
? ? 通常,我們添加異常布局的方法,主要有兩種:1. 在布局include異常界面? 2. 將異常布局寫在該布局中,同時設置Visiable=Gone,即可視性為不可見。然后在activity中,通過對異常控件的顯示進行可視化控制。
2.1 include異常布局
2.2?將異常布局可視性是為Gone
????然后在activity中,控制異常界面中對應控件的顯示。
????以上兩種方法都可以分別實現一種異常布局的顯示,但是有沒有一種方法可以分別不同顯示兩種異常布局呢?答案是可以的,將異常布局默認為網絡異常情況,然后對于沒有數據情況,進行處理。
3. 單布局實現多個異常布局
????下面我們對于這種方法進行探討:
????在上面的代碼中,最重要的是這行,設置圖片資源背景,通過加載無網絡圖片實現一個布局兩種異常。
????我們將異常情況圖片,默認為沒有數據圖片,但是在判斷有無網絡后,通過圖片設置,進行網絡異常情況的設置,便可以實現,單一布局,顯示多種異常文案的效果。
????但是提及到加載圖片,就不得不說imageview設置資源圖片問題。下面我們繼續探討這個問題。
4. Imageview設置資源圖片
????提及ImageView設置資源圖片,老生常談的話題是圖片變形問題和窗口適配問題。
4.1?以背景的形式進行設置圖片
????這種辦法可以實現,單布局實現多個異常布局的需求。但是有一個前提
【注意】這種方法僅適用于兩種異常顯示切圖長寬相近的情況,當長寬比不同時,會導致圖像失真,過度變寬變長,影響顯示。此時可以用include或者gone顯示布局的辦法,進行顯示,畢竟前端業務,產品和UI是大爺。
4.2 以設置圖片的形式設置資源
? ? ? 這種方法不會導致圖片失真,但是沒有辦法填充窗口,會導致沒有辦法覆蓋之前的布局背景,因此實現不了上文的需求。
? ? ? ?好了,今天的分享就到這里,喜歡的同學可以關注我的專欄,我會定期更新我的專欄,和大家一起探討移動端的技術,共同提高。
原文連接