2012-01-23 21 views
6

我有下面的XML:變化<layer-item>項目通過Java代碼

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

<item android:id="@+id/customPlayerProgressBg"> 
    <shape> 
     <gradient 
       android:startColor="#FF999999" 
       android:endColor="#FF999999" 
     /> 
    </shape> 
</item> 

<item android:id="@+id/customPlayerProgressSecondary"> 
    <clip> 
     <shape> 
      <gradient 
        android:startColor="#FF5C3C68" 
        android:endColor="#FF5C3C68" 
      /> 
     </shape> 
    </clip> 
</item> 
<item 
    android:id="@+id/customPlayerProgress" 
> 
    <clip> 
     <shape> 
      <gradient 
       android:startColor="#FF5C3C68" 
       android:endColor="#FF5C3C68" 
      /> 
     </shape> 
    </clip> 
</item> 

</layer-list> 

我想改變 「customPlayerProgress」 和 「customPlayerProgressSecondary」 通過Java代碼。如何才能完成?

+0

【如何更改圖層列表繪製?](http://stackoverflow.com/questions/8018435/how-to-change-a-layer-list-drawable) – Jonik

回答

8

假設你要必須通過Java代碼訪問他們,他們被裝載在你的應用程序被拉伸後,你應該能夠做到像下面這樣:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    final LayerDrawable ld = (LayerDrawable) getResources().getDrawable(R.drawable.my_drawable); 
    final ClipDrawable d1 = (ClipDrawable) ld.findDrawableByLayerId(R.id.customPlayerProgress); 
    final ClipDrawable d2 = (ClipDrawable) ld.findDrawableByLayerId(R.id.customPlayerProgressSecondary); 

    /* modify ld, d1 and d2 by calling their methods here */ 
} 

也期待在this爲一些更多的想法。

+0

THX的可能的複製!它工作得很好= P – Alesqui

+0

工作。 R.id.customPlayerProgress沒有被識別,我不得不重建項目(Project> Clean,然後Build)。 – voghDev

+0

看起來「getResources()。getDrawable(R.drawable.my_drawable)」不會返回可以在代碼中獲得的相同對象。使用「view.getBackground()」獲取LayerDrawable對象不是更好嗎? –

0

您可能熟悉DOM。您只需修改更改並保存該文件。

這是一個article,可能有一些幫助。

1

您不能在運行時更改生成的XML文件。