Se assegno un valore intero per modificare una determinata dimensione del testo di un TextView
codice Java utilizzando, il valore viene interpretato come pixel ( px
).
Ora qualcuno sa come assegnarlo sp
?
Se assegno un valore intero per modificare una determinata dimensione del testo di un TextView
codice Java utilizzando, il valore viene interpretato come pixel ( px
).
Ora qualcuno sa come assegnarlo sp
?
Risposte:
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
Esempio:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));
Ottenere le dimensioni del testo in questo modo convertirà già SP in PX, tenendo conto sia della densità dello schermo che del fattore di scala del testo.
È possibile utilizzare un DisplayMetrics
oggetto per aiutare a convertire tra pixel e pixel ridimensionati con l' scaledDensity
attributo .
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
may be adjusted in smaller increments at runtime based on a user preference for the font size
la dimensione del carattere .
È un approccio più pulito e riutilizzabile
definire la dimensione del testo nel dimens.xml
file all'interno della res/values/
directory:
</resources>
<dimen name="text_medium">14sp</dimen>
</resources>
e quindi applicalo a TextView
:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
Basato sul codice sorgente di setTextSize
:
public void setTextSize(int unit, float size) {
Context c = getContext();
Resources r;
if (c == null)
r = Resources.getSystem();
else
r = c.getResources();
setRawTextSize(TypedValue.applyDimension(
unit, size, r.getDisplayMetrics()));
}
Costruisco questa funzione per calcolare qualsiasi demensione in pixel:
int getPixels(int unit, float size) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
return (int)TypedValue.applyDimension(unit, size, metrics);
}
Dove l'unità è qualcosa di simile TypedValue.COMPLEX_UNIT_SP
.
Per impostazione predefinita setTextSize, senza unità funzionano in SP (ridimensiona il pixel)
public void setTextSize (float size)
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This
size is adjusted based on the current density and user font size preference.
Grazie @ John Leehey e @ Peter:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
Il fatto è che definisci R.dimen.desired_sp a 25 nel tuo dimen.xml
Quando la risposta accettata non funziona (ad esempio quando si tratta di Paint) è possibile utilizzare:
float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
COMPLEX_UNIT_PX
devi dividere la densità.
Questo è il codice per convertire il formato PX in SP . 100% funziona
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);
Dopo aver provato tutte le soluzioni e nessuna con risultati accettabili (forse perché stavo lavorando su un dispositivo con caratteri molto grandi predefiniti), il seguente ha funzionato per me (COMPLEX_UNIT_DIP = Pixel indipendenti dal dispositivo):
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
Dal livello Api 1, è possibile utilizzare il public void setTextSize (float size)
metodo
Dalla documentazione:
Imposta la dimensione del testo predefinita sul valore dato, interpretato come unità di "pixel ridimensionati". Questa dimensione viene regolata in base alla densità corrente e alle preferenze sulla dimensione del carattere dell'utente.
Parametri: size -> float: la dimensione in pixel della scala.
Quindi puoi semplicemente fare:
textView.setTextSize(12); // your size in sp