TextView: l'impostazione della dimensione del testo a livello di codice non sembra funzionare


140

Sto usando Eclipse Indigo, test su 2 emulatori (2.2 e 3.0).

il codice seguente mostra ciò che sto testando ora, tuttavia l'impostazione della dimensione del testo non rivela nulla sullo schermo quando provo a eseguire l'emulatore (se commento la dimensione del testo, il testo viene visualizzato con un colore rosso). Ho pensato che in qualche modo l'eclissi non stesse ricostruendo il codice, ma ho aggiunto la riga di codice per aggiungere lo sfondo blu e ha funzionato. Ho provato a impostare le dimensioni del testo dopo aver impostato il testo senza successo. il codice è sotto. Grazie per l'aiuto! (dichiarazione di non responsabilità) - Sto cercando di stare lontano da XML. Essendo che conosco già Java, non voglio dipendere da quello.

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class TestAndroidvs2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView text = new TextView(this);
    text.setTextColor(Color.RED);
    text.setTextSize(2);    
    text.setBackgroundColor(Color.BLUE);
    text.setText("Hello Android");


    setContentView(text);
  }
}

Risposte:


19

La dimensione del testo 2 sarà praticamente invisibile. Provalo con almeno 14. A proposito, l'uso di xml ha molti vantaggi e ti semplifica la vita quando devi fare qualcosa di più complesso di "Hello World".


Lo proverò con 14. Come ho detto nel primo post - anche se 2 è troppo piccolo, ciò non dovrebbe rendere il mio schermo vuoto? Immagino che lo stavo leggendo come una scala oltre quella che era già il testo invece di limitarmi a impostare le dimensioni. - Guarderò ma chiederò comunque - qual è la dimensione predefinita? comunque grazie.
cspam,

btw - sì, mi rendo conto che xml può avere i suoi vantaggi ma non ho esperienza con esso. Sì, lo so che probabilmente è facile da imparare. Dato che ho già familiarità con Java, ho solo pensato che sarebbe stato utile conoscere il maggior numero di lezioni possibile. Sembra che l'uso dell'XML ti nasconda molto.
cspam,

Non lo nasconde: sono le stesse classi con gli stessi parametri. Ci vuole del tempo per essere in grado di tradurre tra i due, ma in realtà è abbastanza efficiente. Come bonus, se si definiscono le viste in XML, il sistema si prende cura di diverse dimensioni dello schermo, densità e orientamenti, senza la necessità di modificare il codice, solo i file di layout.
Nikolay Elenkov,

saresti in grado di modificare i layout e gli orientamenti in fase di esecuzione in base a un numero qualsiasi di fattori?
cspam,

Questa è una domanda molto ampia, ma in breve sì. Anche se definisci la tua interfaccia utente in XML, puoi comunque aggiungere / rimuovere viste in fase di esecuzione. È inoltre possibile ignorare il comportamento predefinito e gestire autonomamente le modifiche all'orientamento.
Nikolay Elenkov il

536

il metodo TextView.setTextSize(int unit , float size);accetta due parametri.

Prova questo :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

riferisci questo e questo .

AGGIORNAMENTO: ora setTextSize(float size)imposterà automaticamente la dimensione del testo in " scaled pixel" unità. non è necessario menzionare manualmente COMPLEX_UNIT_SP. Fare riferimento alla documentazione .


36
Questa è la risposta corretta Più precisamente: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Brill Pappin,

2
Grazie mille!
DmitryKanunnikoff il

72

Ciò ha risolto il problema per me. Ho una dimensione del carattere uniforme su tutti i dispositivi.

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

R.dimen.font è un numero uniforme o hai dimensioni diverse per dispositivi diversi?
The_Martian,

Nel mio caso ho dichiarato il carattere nei file dimen.xml in queste cartelle: valori, valori-sw600dp, valori-sw720dp con valori specifici.
Vikas,

è strano che TextView sia scomparso dopo la chiamata di textView.setTextSize (R.dimen.text_size_max), ma usa il tuo metodo, funziona.
li2

Per me va bene. Grazie!
apurv thakkar,

24

Attualmente, il setTextSize(float size)metodo funzionerà bene, quindi non è necessario utilizzare un altro metodo per modificare la dimensione del testo

codice sorgente android.widget.TextView.java

/**
 * 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.
 *
 * <p>Note: if this TextView has the auto-size feature enabled than this function is no-op.
 *
 * @param size The scaled pixel size.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
@android.view.RemotableViewMethod
public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

Esempio usando

textView.setTextSize(20); // set your text size = 20sp


12

Si prega di consultare questo link per ulteriori informazioni sull'impostazione della dimensione del testo nel codice. Fondamentalmente dice:

public void setTextSize (int unit, float size)

Da: API Level 1 Imposta la dimensione del testo predefinita su una data unità e valore. Vedere TypedValue per le possibili unità di dimensione. Attributi XML correlati

android: parametri TextSize

unità L'unità di misura desiderata.
dimensione La dimensione desiderata nelle unità indicate.


1
Ho appena ricontrollato Eclipse nel mio codice e secondo intellisense in realtà ho 2 opzioni per setTextSize, setTextSize (float size), setTextSize (int unit, float size). La documentazione che hai collegato lo conferma.
cspam,

Giusto - l'hai provato? Inoltre Nikolay dice che 2 sarà MODO troppo piccolo per vedere, prova anche ad aumentare.
Jack,

sì, ma il problema è che quando provo a farlo nel modo in cui ce l'ho adesso, il testo non compare nemmeno. è solo uno schermo vuoto. Anche se 2 non era evidente perché lo schermo è vuoto?
cspam,

Non è vuoto. Se guardi molto da vicino, puoi vedere i piccoli pixel rossi :). Aumenta gradualmente le dimensioni per vedere.
Nikolay Elenkov,

A proposito, setTextSize (float) equivale a setTextSize (COMPLEX_UNIT_SP, float).
Nikolay Elenkov,

10

Nel mio caso utilizzato questo metodo :

public static float pxFromDp(float dp, Context mContext) {
    return dp * mContext.getResources().getDisplayMetrics().density;
}

Qui imposta TextSize TextView a livello di codice :

textView.setTextSize(pxFromDp(18, YourActivity.this));

Continua a divertirti :)


Ciao @Dhruv Raval, sto raccogliendo per essere in grado di regolare la dimensione del carattere nel mio progetto, nel caso in cui questo valore 18 sia valido per qualsiasi densità di schermo o dovrei creare una dimensione per ogni schermo?
Armando Marques Sobrinho,
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.