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 以设置图片的形式设置资源
这种方法不会导致图片失真,但是没有办法填充窗口,会导致没有办法覆盖之前的布局背景,因此实现不了上文的需求。
好了,今天的分享就到这里,喜欢的同学可以关注我的专栏,我会定期更新我的专栏,和大家一起探讨移动端的技术,共同提高。
原文连接