Android为什么赢得了我的图层列表可绘制比例以适应我的按钮?

时间:2017-05-29 20:55:37

标签: android gradient android-drawable layer-list

我试图为我的Android按钮创建一个花哨的渐变边框。我创建了一个带有图层列表和一些渐变的drawable,预览看起来很不错。但是当我尝试将那个drawable应用到我的按钮时,它看起来并不像预览中的样子。我希望drawable可以拉伸和缩放以适合我的按钮,但它似乎并没有这样做。

谁能告诉我我做错了什么?

这是我的抽奖:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="1dp"/>
            <solid android:color="@color/colorLightGray"/>
            <size android:width="40dp" android:height="10dp"/>
        </shape>
    </item>
    <item android:left="38dp">
        <shape android:shape="rectangle">
            <corners
                    android:topRightRadius="1dp"
                    android:bottomRightRadius="1dp"/>
            <gradient
                android:endColor="@color/colorDarkGreen"
                android:startColor="@color/colorLightGray"
                android:type="linear"/>
        </shape>
    </item>
    <item android:right="38dp">
        <shape android:shape="rectangle">
            <corners
                    android:topLeftRadius="1dp"
                    android:bottomLeftRadius="1dp"/>
            <gradient
                    android:endColor="@color/colorLightGray"
                    android:startColor="@color/colorDarkGreen"
                    android:type="linear"/>
        </shape>
    </item>
    <item android:bottom="8dp">
        <shape android:shape="rectangle">
            <corners
                    android:topLeftRadius="1dp"
                    android:topRightRadius="1dp"/>
            <gradient
                    android:endColor="@color/colorLightGray"
                    android:startColor="@color/colorDarkGreen"
                    android:angle="270"
                    android:type="linear"/>
        </shape>
    </item>
    <item android:top="8dp">
        <shape android:shape="rectangle">
            <corners
                    android:bottomLeftRadius="1dp"
                    android:bottomRightRadius="1dp"/>
            <gradient
                    android:endColor="@color/colorLightGray"
                    android:startColor="@color/colorDarkGreen"
                    android:angle="90"
                    android:type="linear"/>
        </shape>
    </item>
    <item
            android:bottom="8dp"
            android:right="38dp">
        <shape android:shape="rectangle">
            <corners android:topLeftRadius="1dp"/>
            <gradient
                    android:endColor="@color/colorDarkGreen"
                    android:centerColor="@color/colorDarkGreen"
                    android:startColor="@color/colorLightGray"
                    android:centerX="100%"
                    android:centerY="100%"
                    android:gradientRadius="200%"
                    android:type="radial"/>
        </shape>
    </item>
    <item
            android:bottom="8dp"
            android:left="38dp">
        <shape android:shape="rectangle">
            <corners android:topRightRadius="1dp"/>
            <gradient
                    android:endColor="@color/colorDarkGreen"
                    android:centerColor="@color/colorDarkGreen"
                    android:startColor="@color/colorLightGray"
                    android:centerX="0%"
                    android:centerY="100%"
                    android:gradientRadius="200%"
                    android:type="radial"/>
        </shape>
    </item>
    <item
            android:top="8dp"
            android:left="38dp">
        <shape android:shape="rectangle">
            <corners android:bottomRightRadius="1dp"/>
            <gradient
                    android:endColor="@color/colorDarkGreen"
                    android:centerColor="@color/colorDarkGreen"
                    android:startColor="@color/colorLightGray"
                    android:centerX="0%"
                    android:centerY="0%"
                    android:gradientRadius="200%"
                    android:type="radial"/>
        </shape>
    </item>
    <item
            android:top="8dp"
            android:right="38dp">
        <shape android:shape="rectangle">
            <corners android:bottomLeftRadius="1dp"/>
            <gradient
                    android:endColor="@color/colorDarkGreen"
                    android:centerColor="@color/colorDarkGreen"
                    android:startColor="@color/colorLightGray"
                    android:centerX="100%"
                    android:centerY="0%"
                    android:gradientRadius="200%"
                    android:type="radial"/>
        </shape>
    </item>
</layer-list>

这是我的按钮的xml:

<Button
            android:id="@+id/add_some_stuff"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/gradient_border"
            android:textAllCaps="false"
            android:textStyle="normal"
            android:textSize="@dimen/settings_text_size"
            android:textColor="@color/colorSettingsText"
            android:text="@string/add_some_stuff"/>

以下是预览显示的内容: The preview

这是我实际看到的内容: enter image description here

1 个答案:

答案 0 :(得分:0)

您的可绘制尺寸是静态定义的,当它是视图的背景时,无法正确调整大小以进行调整。图层列表属性android:widthandroid:heightandroid:left等都必须使用特定的密度像素大小进行定义。一旦您的视图不再与该大小相对应,它就无法正确显示在drawable中(当您使用match_parentwrap_content时会发生这种情况)。如果你必须使用动态大小调整(我建议),那么我会使用矢量图像而不是layer-list