2010-02-19 3 views
12

Dire che ho uno TextView di una dimensione particolare (non importa cosa ... fill_parent, 20dip, qualunque sia). È possibile dire al testo di ridursi/ingrandirsi per adattarsi allo spazio disponibile senza fare molta matematica?Ridimensionamento del testo Dimensione in un TextView

+0

Si prega di vedere la risposta qui, funziona abbastanza bene: [entra Descrizione collegamento qui] [1] [1]: http://stackoverflow.com/questions/5033012/auto-scale-textview-text-to-fit-within-bounds – AllDayAmazing

risposta

18

Beh, è ​​un po 'più semplice di "un sacco di matematica complessa", ma c'è una soluzione di hacking che uso per questo che è fattibile se la larghezza del testo non è troppo lontana dalla larghezza della tua vista testo.

// HACK to adjust text width 
    final int INITIAL_TEXTSIZE = 15; 
    final int TEXTVIEW_WIDTH = textviewBackground.getIntrinsicWidth(); // I use the background image to find the width, but you can use a fixed value or whatever other method you prefer. 
    final String text = ...; 
    textView.setText(text); 

    int size = INITIAL_TEXTSIZE; 
    while(textview.getPaint().measureText(text) > TEXTVIEW_WIDTH) 
     textview.setTextSize(--size); 

Se la larghezza del testo può essere molto diversa rispetto alla larghezza del vostro TextView, potrebbe essere meglio impiegare una ricerca binaria, invece di una ricerca lineare per trovare la dimensione del carattere giusto.

Non dicendo che questa è una soluzione ideale, ma è utile se non è necessario regolare il testo. Se hai bisogno di regolare frequentemente il tuo testo, potrebbe essere meglio fare qualche matematica complessa.

+0

+1 Risposta molto bella. Dovrebbe essere accettato uno IMO. –

0

U può calcolare il valore della dimensione del carattere dell'idea per un TextView. Questa è la dimensione del font che la riempirà senza essere troppo grande. La formula è:

fontSize = (TextView Height) * (width DPI/height DPI)/(Screen Width * Screen Height); 

La larghezza e l'altezza DPI possono essere acquisite mediante l'override del metodo onConfigurationChanged nella vostra attività, e l'utilizzo di newConfig.screenWidthDp e newConfig.screenHeightDp.

Le dimensioni dello schermo in pixel può essere acquisita tramite la seguente funzione di supporto

// Get Screen Size 
static public Point getScreenSize(Activity aActivity) 
{ 
    Display display = aActivity.getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    return size; 
} 

me a calcolare questo valore come necessario (in onConfigurationChanged) e spingerlo a qualche classe helper statica. Quindi, quando un TextView deve determinare quale dimensione del carattere usare, la estrae da questa classe.

Funziona, ma potrebbe non essere la soluzione più semplice.

+0

Inutile. Non prende in considerazione la lunghezza dei personaggi. – AndroidDev

2

Ho provato quasi tutto quanto sopra e il più fallito incluso quello superiore. Il più semplice e più efficace che ho trovato era emmby ma ho scoperto che dovevi impostare il testo iniziale. Ecco un miglioramento rispetto al suo, dove non è necessario specificare alcun TEXTSIZE affatto:

final String text = "HELP"; 

    TextView tvFlash = (TextView) findViewById(R.id.tvFlash); 

    DisplayMetrics metrics = getResources().getDisplayMetrics(); 
    int width = metrics.widthPixels; 
    int height = metrics.heightPixels; 

    tvFlash.setText(text); 
    tvFlash.setTextSize(TypedValue.COMPLEX_UNIT_PX, 1); 

    int size = 1; 

    do 
    { 
    float textWidth = tvFlash.getPaint().measureText(text); 

    if (textWidth < width) 
     tvFlash.setTextSize(++size); 
    else 
    { 
     tvFlash.setTextSize(--size); 
     break; 
    } 
    }while(true);