2011-12-13 13 views
11

Attualmente sto programmando un app Android. Lì sono bloccato con il layout xml. È possibile assegnare un valore a un tag xml utilizzando una variabile (costante) definita in una classe?Android: l'assegnazione di un valore costante a un xml-elemento

ho una classe chiamata Constants.java per tutti i miei costanti di programma. lo faccio per una migliore manutenibilità. ora vorrei usare una di queste costanti, ad es. VAL come definito di seguito come valore per un UI-widged.

public class Constants { 
public static final int VAL = 10; 
... 
} 

nel mio caso, il widget è una progressbar (stile orizzontale) e vorrei definire il: valore di "Android max". normalmente si può scrivere:

android:max="10" 
android:max="@Integer/val 

ma vorrei utilizzare il valore definito nella mia classe costanti, qualcosa di simile:

android:max="Constants.VAL" 

c'è una soluzione per questo?

grazie

+0

non credo se possibile o no, ma io uso strings.xml per tali scopi. Viene utilizzato allo stesso modo della classe Constants. – belurd

risposta

16

No, non puoi. I valori costanti nelle classi sono disponibili solo in fase di esecuzione e i file XML vengono compilati e generati prima del runtime.

La prossima migliore cosa da fare è dichiarare le costanti XML che si desidera utilizzare in res/values/integers.xml. Ecco un esempio di file integers.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <integer name="max">10</integer> 
</resources> 

per utilizzare questo valore in XML, fare questo:

<YourComponent 
    android:yourattr="@integer/max"/> 
+0

Se valori costanti sono disponibili solo in fase di esecuzione, come possiamo scrivere 'layout_height = "match_parent"', in quanto 'match_parent' è una costante? –

0

La tua domanda non è molto chiaro, che cosa vuoi fare con quella? Se si desidera utilizzare un valore costante, è sufficiente creare gli ui-widget con le costanti e ignorare semplicemente l'xml.

+0

Ho riformulato la domanda per una migliore comprensibilità. Non voglio codificare il valore nel file xml per ragioni di manutenibilità. – grAPPfruit

0

E 'possibile utilizzando Data Binding.

La classe dovrebbe essere simile a questa:

class Constants extends BaseObservable { 

    private static final int MY_INT = 10; 

    @Bindable 
    public int getMyInt() { 
     return MY_INT; 
    } 
} 

e l'xml in questo modo:

<layout 
    ... 
    > 
    <data> 
     <variable 
      name="constants" 
      type="your.package.Constants" /> 
    </data> 

... 

<YourComponent 
    android:max='@{constamts.myInt}' 

... 

</layout> 
  • Non dimenticare di impostare la stessa associazione (binding.setConstants(constants)).
Problemi correlati