Ottieni dimensione da XML e imposta la dimensione del testo in runtime


101

In dimens.xml, ho:

<dimen name="text_medium">18sp</dimen>

In runtime, ottengo questo valore e imposto la dimensione del testo di una visualizzazione di testo:

int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).

Su un tablet da 10 ″ (1280 x 800) è tutto ok; ma su un telefono (800 x 480), la visualizzazione del testo ha un carattere molto grande. Sul tablet, la dimensione è pari a 18; al telefono sono 27.

Se imposto manualmente la dimensione tramite:

textView.setTextSize(size)

la dimensione è normale su entrambi i dispositivi.

Risposte:


297
<dimen name="text_medium">18sp</dimen>

Imposta la dimensione nel codice:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));

7
Non so dell'OP, ma questa era la risposta che stavo cercando. Stavo usando COMPLEX_UNIT_DP pensando di dover specificare il tipo di input e non il tipo di output.
HenryAdamsJr

quando ottengo la dimensione del mio carattere (definita in a sp) ottengo 60. Quando lo reimpostato con OMPLEX_UNIT_PX e lo recupero di nuovo ottengo 70. Sembra che non tutto sia chiaro qui
Gleichmut

2
Per la dimensione del testo, perché non posso usare TypedValue.COMPLEX_UNIT_SPinvece?
orfani

3
@dphans Il Resources.getDimension()metodo restituisce il valore che è già moltiplicato per la metrica appropriata
pkuszewski

2
@pkuszewski Wow, è così confuso.
Big_Chair

4

Entrambi i metodi getDimensionPixelSize () e getDimension () utilizzano la densità dello schermo per calcolare i pixel. La densità dello schermo del tuo telefono è ovviamente hdpi (240 dpi), quindi utilizza la scala 1.5 per convertire dp in sp. Matematica semplice 18 * 1,5 = 27.

Sembra che la densità del tablet sia mdpi (160 dpi), quindi la scala è solo 1: 1.

Ma se confronti la dimensione reale di entrambi i testi dovrebbe essere la stessa.

Il modo migliore è semplicemente creare due file dimens.xml, uno nella cartella dei valori per il telefono e un altro in values-sw600dp per i tablet (è possibile utilizzare anche la cartella values-sw720dp-land per memorizzare le dimensioni dei tablet da 10 pollici con orientamento orizzontale).

Puoi leggere ulteriori informazioni sulle dimensioni in Android su: http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.