@(Alu)
昨天在给Activity
添加 theme
的时候,修改theme
的background
遇到问题。
theme
的background
需要一个drawable
下的 xml
格式的文件来添加。
然后想在 drawable
里去放置图标在某个位置的时候,我们需要用到layer-list
这个标签,在他的item
标签里去添加一个src =@drawable
属性,或者也可以在item
标签里直接添加一个bitmap
标签。如下所示:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 整体的背景颜色 -->
<item android:drawable="@color/white" />
<item>
<bitmap android:src="@drawable/welcome_page_logo"
android:gravity="bottom"/>
</item>
<item android:drawable="@drawable/welcome_page_logo"
android:gravity="bottom">
</item>
</layer-list>
这两种方式都是可行的,但是如果我们想让图片平铺也就是占满每一个不同的android手机的屏幕底部,应该怎样做?
对于 item
标签是没有提供譬如 android:layout_width="match_parent"
这种属性的,但是却提供了android:width="0dp"
,当然也有height
,也就是高度,但在这里有两个问题,一是这里的 width
与height
属性无法设置match_parent
,只能设置定长,当然我们也可以给他设置一个特别大的长度,让他占满屏幕,但是一点也不优雅我觉得另一点呢,是这两个属性吧,他不向下兼容,也就说在低版本手机上,他不生效,看到这里,我有些懵逼,但是不急。
其实item
标签还有另外一种属性:
android:right="0dp" android:left="0dp" android:bottom="0dp"
这属性是什么意思呢,它代表margin
也就是距离父布局的距离,它神奇的地方在于可以拉伸或压缩图片,就比如你的图片宽度只有10dp,当你设置right=0dp
与left=0dp
的时候,就相当于你设置了match_parent
一样。现在的代码是这样的:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 整体的背景颜色 -->
<item android:drawable="@color/white" />
<!--item 的right 等属性可起到拉伸索引目标的作用-->
<item android:drawable="@drawable/welcome_page_logo"
android:right="0dp"
android:left="0dp"
android:bottom="0dp"
android:gravity="bottom">
</item>
</layer-list>
目的好像达到了,但是测试过程中发现,在6.0以下的设备,drawable
会被拉伸到占满整个屏幕,查看文档发现:
意思是
drawable
会根据内部的bitmap
元素来缩放贴合,如果不想让它缩放,那就给bitmap
设置一个权重,到这里问题基本解决了,对于6.0以上的设备,drawable里的权重值也会影响不让他缩放问题,但从兼容性考虑这种方式放弃掉,改用添加子标签bitmap
方式:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 整体的背景颜色 -->
<item android:drawable="@color/white" />
<item >
<bitmap android:src="@drawable/welcome_page_logo"
android:gravity="bottom|fill_horizontal"
android:filter="true"/>
</item>
</layer-list>
至此,问题解决。