2015-01-05 3 views
8

Ho un EditText che è decimale e ho impostato la sua lunghezza utilizzando Android: maxLength proprietà in xml:Ottenere valore intero da dimens.xml file di risorse in Android

<EditText 
     android:id="@+id/quantity" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="numberDecimal" 
     android:singleLine="true" 
     android:maxLength="@integer/quantity_length" /> 

Come la sua lunghezza sta andando da utilizzare non solo nel file xml della UI ma anche in una classe java e forse in altri posti, voglio evitare problemi quando aggiorno questo valore in futuro, quindi voglio mettere la lunghezza centralizzata nel file di risorse dimens.xml come segue:

dimens.xml

<resources> 

    <!-- other things --> 

    <!-- Constants --> 
    <item name="quantity_length" format="integer" type="integer">10</item> 

    <!-- other things --> 

</resources> 

Da una classe Java ho bisogno di leggere questo valore in modo eseguo:

TypedValue typedValue = new TypedValue(); 
    this.getResources().getValue(R.integer.quantity_length, typedValue, true); 

ma posso noto che non esiste un metodo getInt(), solo getFloat():

int digitsBefore = typedValue.getFloat(); 

così come ho bisogno di ottenerlo come numero intero .... come fare questo? Certo, forse posso ottenerlo usando getFloat() e poi lanciare in intero ... ma non so se è un modo elegante per farlo ... quindi qualche idea?

UPDATE: Oooppssss Ho fatto un errore. È: quantità int = typedValue.getFloat();

invece di:

int digitsBefore = typedValue.getFloat(); 
+1

perché non si utilizza 'getResources(). GetDimens'? –

risposta

26

Perché non memorizzare il numero intero in res/integers.xml

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

E per accedere ai valori nel codice

int myInteger = getResources().getInteger(R.integer.quantity_length); 

O in XML

android:maxLength="@integer/quantity_length" 
+0

Ottimo! Ho appena scoperto in questo momento utilizzando getInteger;) Molte grazie. Inoltre, ho visto in voi raccomanda di utilizzare un file separato "integers.xml". È più adatto rispetto all'utilizzo del file dimens.xml esistente? – user1624552

+1

Sì, è inteso per memorizzare numeri interi, dimens è per memorizzare dimensioni come ** dp **, ** sp ** e così via. – Marko

+0

totalmente d'accordo;) – user1624552

0

Usa:

Integer.ParseInt(digitsBefore); 
1

non avete bisogno di un TypedValue utilizzare la seguente

(int) this.getResources().getDimension(R.integer.quantity_length);

1

Con il tuo esempio, perché non usi questo metodo?

XML

<integer name="quantity_length">10</integer> 

JAVA

getResources().getInteger(R.integer.quantity_length); 
1
int max = getContext().getResources().getInteger(R.integer.quantity_length);