2014-04-27 14 views
8

Nella mia attività sto mantenendo un , in cui sto impostando il tema.Ottieni il valore del colore attr basato sul tema impostato corrente

public class SuperActivity extends Activity { 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setTheme(R.style.MyTheme); 
    } 
} 

themes.xml

<!-- ImageBackround --> 
<style name="Theme.MyTheme" parent="ThemeLight"> 
    <item name="myBgColor">@color/translucent_black</item> 
</style> 

Ora voglio prendere questo colore in uno della mia attività figlio.

Come menzionato in questo probabile answer, ho scritto:

int[] attrs = new int[] { R.attr.myBgColor /* index 0 */}; 
TypedArray ta = ChildActivity.this.obtainStyledAttributes(attrs); 
int color = ta.getColor(0, android.R.color.background_light); 
String c = getString(color); 
ta.recycle(); 

Ma ogni volta che sto ottenendo il valore del valore predefinito di android.R.color.background_light & non di R.attr.myBgColor.

Dove sto sbagliando. Sto passando il contesto sbagliato di ChildActivity.this?

risposta

7

Hai due possibili soluzioni (uno è quello che in realtà hanno ma includere sia per ragioni di completezza):

TypedValue typedValue = new TypedValue(); 
if (context.getTheme().resolveAttribute(R.attr.xxx, typedValue, true)) 
    return typedValue.data; 
else 
    return Color.TRANSPARENT; 

o

int[] attribute = new int[] { R.attr.xxx }; 
TypedArray array = context.getTheme().obtainStyledAttributes(attribute); 
int color = array.getColor(0, Color.TRANSPARENT); 
array.recycle(); 
return color; 

Color.TRANSPARENT potrebbe essere qualsiasi altro difetto di sicuro . E sì, come sospettavate, il contesto è molto importante. Se continui a ottenere il colore predefinito anziché quello reale, controlla il contesto che stai passando. Mi ci sono volute diverse ore per capirlo, ho cercato di risparmiare un po 'di digitazione e ho semplicemente usato getApplicationContext() ma non trova i colori allora ...

+0

Finalmente una risposta che funziona fuori dalla scatola! – kirtan403

Problemi correlati