2013-05-19 7 views
28

Ho un file xml Drawable (background.xml):Cambia colore solido forma in fase di esecuzione all'interno di XML Drawable utilizzato come sfondo

<?xml version="1.0" encoding="UTF-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape> 
     ........... 
     </shape> 
    </item> 

    <item android:id="@+id/shape_id"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#ffefefef" /> 
     </shape> 
    </item> 

</layer-list> 

usato da un LinearLayout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="@drawable/background" 
    android:id="@+id/layout_id" 
    > 

Ora ho bisogno per cambiare la forma del colore solido shape_id in fase di esecuzione in base ad alcune condizioni. Come fare questo?

+0

no non credo che sia possibile – Raghunandan

+7

Impossible è nulla – AndroidGecko

risposta

59

Trovato da me:

View v = findViewById(R.id.layout_id); 

    LayerDrawable bgDrawable = (LayerDrawable)v.getBackground(); 
    final GradientDrawable shape = (GradientDrawable) bgDrawable.findDrawableByLayerId(R.id.shape_id); 
    shape.setColor(----); 
+3

Avete qualche idea di come implementare la stessa su RemoteView per i widget? Grazie. – rxlky

+0

Siamo spiacenti, ma non ho ancora avuto l'opportunità di lavorare con RemoteView. –

+0

@ MV1 Ciò è possibile nella visualizzazione remota. Perché non funziona. Puoi guidarmi http://stackoverflow.com/questions/24545857/how-to-change-remote-view-background-in-runtime?noredirect=1#comment38013228_24545857 –