2013-05-19 11 views
8

Sono un principiante nello sviluppo di Android e, anche se la codifica rende perfetti sence, Android temi IMHO Nontemi Android guai attuazione il più semplice: personalizzato per colore tema

ho difficoltà a attuare questo compito semplice:

ho (per esempio) un colore denominato "blah"

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="blah">#F0F0F0</color> 
<resources> 

che viene utilizzato in tutto il mondo nei layout XML o codice e da vista differenti complonents come "@ colore/bla"

Vorrei semplicemente piace a fare questo cambiamento valore colore per-tema

Così, quando io uso MyTheme1, bla dovrebbe essere # F0F0F0 e quando uso MyTheme2 bla dovrei essere # 00FF00

ho letto sui temi e non riesco ancora a scoprire come implementare questo semplice compito, dal momento che la mia app non richiede stili speciali e così via, solo colori per tema.

Grazie in anticipo

UPDATE:

Dopo il link fornito da Mohamed_AbdAllah, sono riuscito con successo per creare alcuni colori personalizzati definendoli in attrs.xml e styles.xml:

attrs.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="color_item_title" format="color|reference" /> 
</resources> 

styles.xml

<style name="AppBaseThemeDark" parent="android:Theme.Black"> 
<item name="color_item_title">@color/White</item>      
</style> 

Ma ora un problema molto più serio si pone

posso utilizzare con successo il colore? Color_item_title in ogni vista, in modo da pulsanti e il testo in realtà ottiene quel colore.

Ma usando questo? Color_item_title su disegni a disegno o listview personalizzati (CHE È VEDUTE CHE OTTENGONO DURANTE IL DURANTE RUNTIME) causa un arresto anomalo.

Quindi, utilizzando color_item_title all'interno di un ListView ListItem di layout si blocca in fase di esecuzione con un messaggio di gonfiatore a quella linea :(

Si blocca anche i miei drawable:? (errore di inflazione di nuovo)

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 

<solid android:color="@color/Black" /> 
<corners 
    android:bottomLeftRadius="8dp" 
    android:bottomRightRadius="8dp" 
    android:topLeftRadius="8dp" 
    android:topRightRadius="8dp" /> 
<stroke android:width="1dp" android:color="?color_item_title" /> 
</shape> 
+3

controlla questa [domanda] (http://stackoverflow.com/questions/8630694/theme-dependent-colors-of-selected-widgets) –

+0

Anche se il tuo link ha fornito assistenza, è sorto un problema più serio, quindi ho aggiornato il mio post –

risposta

0

L'unico modo per ottenere ciò che si desidera è definire due colori diversi, ad esempio blah e blah2 e fare riferimento ai temi

3

Dopo aver cercato e provato, ho ricevuto il suggerimento che ci sono alcune cose che puoi fare e alcune cose che non puoi.

Puoi

a) Definire i propri attributi in attrs

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="color_gallery_backround" format="color|reference" /> 
</resources> 

b) Impostare i valori nel vostro styles.xml

<style name="AppBaseThemeDark" parent="android:Theme.Black"> 
      <item name="color_gallery_backround">@color/White</item>    
</style> 
<style name="AppBaseThemeWhite" parent="android:Theme.Light"> 
      <item name="color_gallery_backround">@color/Black</item>    
</style> 

c) Utilizzarli in qualsiasi visualizza come? color_gallery_backround o? attr/color_gallery_backround per esempio

android:background="?attr/color_gallery_backround" 

cant

a) Non puoi accedere a questo attributo dalla drawable personalizzati, in quanto non sono validi durante inflazione

modo cant uso attr/color_gallery_backround qui?:

customshape.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 

<solid android:color="**?attr/color_gallery_backround**" /> 
<stroke android:width="2dp" android:color="@color/Black" /> 
</shape> 

b) Non puoi accedere a questo attributo in una vista che andranno gonfiato durante (per esempio) un ListView come vista ListItem

Così tema "sostegno" per gli attributi, almeno fino a API 10 ha limiti di profondità.

Solutions

Come suggerito, si devono creare due drawable separati con colori diversi e impostare gli attributi per fare riferimento a questi drawable per temi:

attrs.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="rounded_background" format="reference" /> 
</resources> 

e su ciascun tema, impostare quale drawable effettivo utilizzare in styles.xml:

<resources> 

    <style name="AppBaseThemeDark" parent="android:Theme.Black"> 
      <item name="rounded_background">@drawable/round_rect_shape_dark</item>  
      </style> 

    <style name="AppBaseThemeLight" parent="android:Theme.Light"> 
      <item name="rounded_background">@drawable/round_rect_shape_white</item>  
      </style> 

</resources> 

Ora puoi fare riferimento al tuo drawable come? Rounded_background e lasciare che sia il tema a sceglierlo.

Per le viste gonfiate all'interno dei layout listitem di ListView, è necessario impostare i colori a livello di programmazione.

0

Funziona per me come suggeriva John S, ma nella definizione degli attributi ho dovuto aggiungere "colore | riferimento" anziché solo "riferimento". Quindi il mio file attrs.xml assomiglia a questo:

<?xml version="1.0" encoding="utf-8"?> 
    <resources> 
     <attr name="rounded_background" format="color|reference" /> 
    </resources> 

Le migliori regate!