2010-02-19 14 views
12

decir que tengo un TextView de un tamaño determinado (en realidad no importa lo que ... fill_parent, 20dip, lo que sea). ¿Es posible decirle al texto que se encoja/aumente de tamaño para que se ajuste al espacio disponible sin hacer muchas operaciones matemáticas?Escala Tamaño del texto en un TextView

+0

Por favor ver la respuesta aquí, funciona bastante bien: [enter Descripción enlace aquí] [1] [1]: http://stackoverflow.com/questions/5033012/auto-scale-textview-text-to-fit-within-bounds – AllDayAmazing

Respuesta

18

Bueno, es un poco más simple que "muchas matemáticas complejas", pero hay una solución de corte que uso para esto que es factible si el ancho del texto no está muy lejos del ancho de su vista de texto.

// 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); 

Si la anchura de su texto puede ser significativamente diferente que el ancho de la Vista de Texto, tal vez sería mejor emplear una búsqueda binaria en lugar de una búsqueda lineal para encontrar el tamaño de la fuente correcta.

no decir que esto es una solución ideal, pero es uno conveniente si no a menudo necesita ajustar su textsize. Si necesita ajustar con frecuencia su tamaño de texto, podría ser mejor hacer algunas matemáticas complejas.

+0

+1 Muy buena respuesta. Debe ser la OMI aceptada. –

0

U puede calcular el valor del tamaño de la fuente de la idea para un TextView. Ese es el tamaño de fuente que lo llenará sin ser demasiado grande. La fórmula es:

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

La anchura y la altura DPI pueden ser adquiridos reemplazando el método onConfigurationChanged en su actividad, y el uso de newConfig.screenWidthDp y newConfig.screenHeightDp.

El tamaño de la pantalla en píxeles puede ser adquirida mediante la siguiente función auxiliar

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

acabo de calcular este valor, según sea necesario (en onConfigurationChanged) y empujarlo hasta cierto clase auxiliar estática. Entonces, cuando un TextView necesita determinar qué tamaño de fuente usar, lo saca de esta clase.

Funciona, pero podría no ser la solución más sencilla.

+0

inútil. No toma en cuenta la longitud de los caracteres. – AndroidDev

2

Probé casi todo lo anterior y la mayoría falló, incluso la superior. El más simple y efectivo que encontré fue de Emmby, pero descubrí que tenía que establecer el tamaño de texto inicial. Aquí es una mejora en su donde no es necesario especificar cualquier textsize en absoluto:

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); 
Cuestiones relacionadas