2013-02-25 50 views
2

如何在XML中選擇android:drawable屬性是在級別列表XML中定義的一種drawables?
我正在定義層次列表XML本身的drawable,以避免定義許多小XML文件。Android從XML級別列表中選擇drawable

<?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> 

回答

2

這是不可能的。我只是在想着同樣的想法,期待像ImageView這樣的屬性。像Android:level

但是不,setLevel方法在XML屬性中沒有等價物。您(和我)必須以編程方式致電setLevel

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編程