2

如何在 XML中为android:drawable属性选择 level-list XML 中定义的可绘制对象之一?
我在级别列表 XML 本身中定义可绘制对象,以避免定义许多小的 XML 文件。

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:maxLevel="0">
        <shape 
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <gradient 
                android:startColor="@color/empty" 
                android:endColor="@android:color/white"
                android:angle="90" />

        </shape>
    </item>

    <item android:maxLevel="1">
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle" >
            <gradient 
                android:startColor="@color/low"
                android:endColor="@android:color/white"
                android:angle="90" />

        </shape>
    </item>

    <item android:maxLevel="2">
        <shape 
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <gradient 
                android:startColor="@color/middle"
                android:endColor="@android:color/white"
                android:angle="90" />

        </shape>
    </item>

    <item android:maxLevel="3">
        <shape 
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <gradient 
                android:startColor="@color/high"
                android:endColor="@android:color/white"
                android:angle="90" />

        </shape>
    </item>

    <item android:maxLevel="4">
        <shape 
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <gradient 
                android:startColor="@color/full"
                android:endColor="@android:color/white"
                android:angle="90" />

        </shape>
    </item>

</level-list>
4

2 回答 2

2

这不可能。我只是在搜索相同的想法,期待类似ImageView. 类似的东西Android:level

但是不,该setLevel方法在 XML 属性中没有等效项。你(和我)必须以setLevel编程方式调用。

于 2013-09-09T16:43:57.457 回答
0

在 API 24(及更高版本)中,现在支持此功能;android:level<scale>指定初始可绘制级别的元素中找到,范围为 0 到 10000,因此可以这样使用<layer-list>

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background"
          android:gravity="center_vertical|fill_horizontal">
        <shape android:shape="rectangle"
            android:tint="?attr/colorControlNormal">
            <size android:height="4dp" />
            <solid android:color="@android:color/white_disabled_material" />
        </shape>
    </item>
    <item android:id="@android:id/secondaryProgress"
          android:gravity="center_vertical|fill_horizontal">
        <scale android:scaleWidth="100%"
            android:level="2000">
            <shape android:shape="rectangle"
                android:tint="?attr/colorControlActivated" >
                <size android:height="4dp" />
                <solid android:color="@android:color/black" />
            </shape>
        </scale>
    </item>
    <item android:id="@android:id/progress"
          android:gravity="center_vertical|fill_horizontal">
        <scale android:scaleWidth="100%"
            android:level="1000">
            <shape android:shape="rectangle"
                android:tint="?attr/colorControlActivated" >
                <size android:height="4dp" />
                <solid android:color="@android:color/white_disabled_material" />
            </shape>
        </scale>
    </item>
</layer-list>

要动态更改级别,然后以setLevel编程方式调用

于 2016-08-13T13:53:07.877 回答