您的位置:首页 > 移动开发 > Android开发

Android中给ImageView添加background和src的区别

2017-10-21 19:34 686 查看
 Android中给ImageView添加背景资源时,有两种方式可以选择,第一种是使用android:src添加,另一种是使用android.background添加,这两种添加方式虽然都能够起作用,但是在实际的使用效果中还是有些许的区别。

  在这里只介绍背景资源为使用xml文件画出的图片加载。

  首先我们使用以下xml文件画出一个带边框的方形:

  在drawable文件中创建文件focus_style.xml

<?xml version="1.0" encoding="utf-8"?>`
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<gradient
android:endColor="@android:color/holo_blue_dark"
android:startColor="@android:color/holo_blue_bright" />
</shape>
</item>
</layer-list>


  在这个xml文件中我们画出了一个渐变色块。然后在布局文件中添加一个
<ImageView>
标签,在该标签中使用
android:src
android:background
来加载图片资源的效果是一样的。

  但是如果我们在drawable文件中绘制图片的时候使用了相对的位置信息,如下所示:(在上图中添加了两个
item
)

  <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:endColor="@android:color/holo_blue_dark"
android:startColor="@android:color/holo_blue_bright" />
</shape>
</item>
<item>
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:width="8dp"
android:color="@color/colorAccent"/>
</shape>
</item>
<item android:bottom="8dp"
android:left="8dp"
android:top="8dp"
android:end="8dp">
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:width="8dp"
android:color="#000"/>
</shape>
</item>
</layer-list>


  这种情况下两种资源加载方式便不尽相同:

  使用src加载的效果如下:

  


  使用background加载的效果如下:

  




  两种加载效果并不相同,其中很重要的原因在于(Android版本的原因): 

  在Android 6及以前的系统中,可以认为

  background是作为背景显示的,而src是作为内容填充显示的,可以被认为是前景。

  background可以为控件设置图片或者颜色,设置的大小时
match_parent
或者固定值时,该图片将会被拉伸以填充满整个控件.如果设置成
wrap_content
时,则会显示原本的大小.上面的实例中,我们设置了
<ImageView>
的长宽,因此该图片将会以填充的方式显示。

  如果background设置为颜色值,那么
<ImageView>
整个区域都会被该颜色值填充。当
<ImageView>
仅仅设置了背景颜色而没有设置src,且宽或者高被设置为wrap_content时,则该View将不会显示。

   使用background添加背景资源时,所添加的背景能够充满整个控件的大小,如果当前使用的资源不能够满足控件大小时,将会把当前资源自动进行拉伸以满足添加背景资源的需要。但是在使用src填充是,如果填充的资源没有固定的大小,那么src将会按照自己的方式将整个控件占满,不会考虑多层叠加的效果

  以上的结果是在Android6.0的版本上进行编译运行的,但是在Android7.0以上的版本上已经修复了这个bug,因此在7.0以上的版本上无论使用src还是background,都能设置成上图二中这样的多层描边效果。

  因此当应用要跨Android版本使用时,要注意这个问题,避免因为设置图片资源出现布局错误的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息