2013-12-20 135 views
18

我試圖以編程方式更改selectable_kachel_shape的顏色。下面是XML文件:以編程方式更改層列表中形狀的顏色

kachel_ticked_style.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 


    <item> 
     <shape 
      android:id="@+id/selectable_kachel_shape" 
      android:shape="rectangle" > 
      <stroke 
       android:width="5dp" 
       android:color="@color/headrbar_color" /> 
     </shape> 
    </item> 
    <item> 
     <rotate 
      android:fromDegrees="45" 
      android:pivotX="120%" 
      android:pivotY="100%" 
      android:toDegrees="45" > 
      <shape android:shape="line" > 
       <stroke 
        android:width="40dp" 
        android:color="@color/headrbar_color" /> 
      </shape> 
     </rotate> 
    </item> 
    <item 
     android:right="5dp" 
     android:top="5dp"> 
     <bitmap 
      android:gravity="top|right" 
      android:src="@drawable/selectable_tiles_check" /> 
    </item> 

</layer-list> 

我一個片段中調用以下代碼

LayerDrawable layers = (LayerDrawable) this.getActivity().getResources().getDrawable(R.drawable.kachel_ticked_style); 

GradientDrawable shape = (GradientDrawable) (layers.findDrawableByLayerId(R.id.selectable_kachel_shape)); 
         shape.setColor(this.getActivity().getResources().getColor(android.R.color.background_dark); 

1.爲什麼我在形狀歌廳一個NullPointerException。 setColor

2.如何以編程方式更改形狀內部的顏色,即圖層列表中的顏色?

回答

24

好,我找到了答案,我只是把形狀的標識的項,裏面沒有形狀 kachel_ticked_style.xml

<item 
    android:id="@+id/selectable_kachel_shape"> 
     <shape 
      android:shape="rectangle" > 
      <stroke 
       android:width="5dp" 
       android:color="@color/headrbar_color" /> 
     </shape> 
    </item> 

然後你就可以更改的任何顏色形狀調用shape.setColor或中風調用shape.setStroke(strokeWidth,則strokeColor)

+0

的顏色,但我有相同problem.This不工作對我來說 –

+0

嘛@ji ncyabraham你可以得到視圖然後它的背景可繪製然後得到形狀作爲gradiendrawable在這裏[鏈接](http://stackoverflow.com/questions/16636412/change-shape-solid-color-at-runtime-inside- drawable-xml-used-as-background) – M090009

+0

你可以請你說明你做了什麼步驟來獲取形狀對象,目前還不清楚。 –

相關問題