El texto de TextView se reduce al ancho dado
Tengo un campo textview en mi actividad. Su tamaño de fuente es 16. Su texto se establece a través de código. Supongamos que si tengo un texto grande, debería reducir estos datos (es decir, reducir el tamaño de fuente) en lugar de ir a la siguiente línea. ¿Cómo puedo hacerlo?
<TextView android:id="@+id/textView" android:layout_width="400dp" android:layout_height="wrap_content" android:text="" android:textSize="16sp" />
- Estilo de caracteres / intervalo para establecer el espaciado entre letras
- Android: la altura de TextView no cambia después de reducir el tamaño de fuente
- Los enlaces de Android TextView no se resaltan cuando se hace clic
- Recurso no encontrado TextView
- dinámicamente establecer el símbolo de moneda
- Cómo hacer invisible una vista de texto
- Elipses de desvanecimiento de varias líneas en un TextView
- ¿Se puede seleccionar un TextView y contener vínculos?
- Kotlin: ¿Cómo obtener y establecer un texto en TextView en Android usando Kotlin?
- Cómo utilizar ClickableSpans en un TextView y seguir siendo capaz de desplazarse horizontalmente?
- Romper una línea sin aumentar la longitud del texto
- Convertir la altura de la línea en lineSpacingExtra y lineSpacingMultiplier
- Wrappable TextView con SpannableStringBuilder y ImageSpan esconde la última imagen en cada línea
Lo conseguí usando el siguiente método que creé de acuerdo a mi requisito.
private void autoScaleTextViewTextToHeight(TextView tv) { String s = tv.getText().toString(); float currentWidth = tv.getPaint().measureText(s); float phoneDensity = this.getResources().getDisplayMetrics().density; while(currentWidth > (REQUIRED_WIDTH * phoneDensity)) { tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, tv.getTextSize() - 1.0f); currentWidth = tv.getPaint().measureText(s); } }
El siguiente método toma el parámetro TextView como y ajusta el tamaño de su fuente de acuerdo con el ancho de TextView
private void adjustTextSize(TextView tv) { float size = tv.getPaint().getTextSize(); TextPaint textPaint = tv.getPaint(); float stringWidth = textPaint.measureText(tv.getText().toString()); int textViewWidth = tv.getWidth(); if(textViewWidth > stringWidth) { float percent = (textViewWidth / stringWidth); textPaint.setTextSize(size*percent); } }
Espero que esto ayude.
no hay manera agradable. lo que puede hacer es calcular el tamaño del texto que va a colocar en este TextView y volver a ajustar el tamaño de la fuente hasta que encaje en el área de destino. para calc uso de tamaño Paint.getTextBounds ().
Lo he hecho muy similar por dibujar sobre un lienzo. requries un bucle que disminuye el fontsize hasta que el tamaño calculado es adecuado.