美文网首页自定义View
layer-list 使用遇到的item平铺的问题

layer-list 使用遇到的item平铺的问题

作者: 吃掉你了喔 | 来源:发表于2018-04-27 16:15 被阅读0次

    @(Alu)
    昨天在给Activity添加 theme的时候,修改themebackground遇到问题。
    themebackground需要一个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,也就是高度,但在这里有两个问题,一是这里的 widthheight 属性无法设置match_parent,只能设置定长,当然我们也可以给他设置一个特别大的长度,让他占满屏幕,但是一点也不优雅我觉得另一点呢,是这两个属性吧,他不向下兼容,也就说在低版本手机上,他不生效,看到这里,我有些懵逼,但是不急。
    其实item标签还有另外一种属性:
    android:right="0dp" android:left="0dp" android:bottom="0dp"
    这属性是什么意思呢,它代表margin也就是距离父布局的距离,它神奇的地方在于可以拉伸或压缩图片,就比如你的图片宽度只有10dp,当你设置right=0dpleft=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 会被拉伸到占满整个屏幕,查看文档发现:

    API.png
    意思是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>
    

    至此,问题解决。

    相关文章

      网友评论

        本文标题:layer-list 使用遇到的item平铺的问题

        本文链接:https://www.haomeiwen.com/subject/wwcblftx.html