2012-01-23 12 views
6

ho il seguente codice XML:Modifica <layer-item> articoli di codice 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> 

Voglio cambiare la "customPlayerProgress" e il "customPlayerProgressSecondary" di codice Java. Come può essere realizzato?

+0

Possibile duplicato di [Come modificare un elenco di livelli disegnabile?] (Http://stackoverflow.com/questions/8018435/how-to-change-a-layer-list-drawable) – Jonik

risposta

8

Supponendo che si desidera avere accesso ad essi attraverso il codice Java dopo che sono stati caricati come Drawable nella vostra applicazione, si dovrebbe essere in grado di fare qualcosa di simile al seguente:

@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 */ 
} 

un'occhiata anche a this per qualche altra idea.

+0

Thx! Ha funzionato bene = P – Alesqui

+0

lavorato. R.id.customPlayerProgress non è stato riconosciuto, ho dovuto ricostruire il progetto (Project> Clean, quindi Build). – voghDev

+0

Sembra che "getResources(). GetDrawable (R.drawable.my_drawable)" non restituisca lo stesso oggetto che può essere ottenuto nel codice. Non è meglio ottenere oggetti LayerDrawable usando "view.getBackground()"? –

0

Potrebbe avere familiarità con DOM. Hai solo bisogno di modificare la modifica e quindi salvare il file.

Ecco uno article che potrebbe essere di qualche aiuto.

1

Non è possibile modificare i file XML generati in fase di esecuzione.