android-textview móviles - El tamaño automático de TextView no funciona(Android O)




curso programacion (8)

Utilizo la nueva función de tamaño automático agregada en la biblioteca de soporte 26. Leí una documentación que se puede encontrar aquí: https://developer.android.com/preview/features/autosizing-textview.html

Supongo que debería funcionar de esta manera: puede habilitar el tamaño automático con este atributo: app:autoSizeTextType="uniform" . Creo que TextView debería usar todo el espacio disponible para mostrar un texto completo (no solo una parte, no debe recortarse) y el textSize del textSize debe ser lo más grande posible. Si necesita limitar un tamaño máximo o mínimo del texto, puede usar estos dos atributos:

app:autoSizeMinTextSize="XXsp" // (you can also use px or dp values.)

o

app:autoSizeMaxTextSize="XXsp"

Hasta ahora tan bueno. Digamos que necesito un TextView con 56dp de ancho. Tengo textos con una longitud diferente y quiero configurar estos textos para este TextView . Se debe redimensionar automáticamente para que muestre todo el texto (todos los caracteres + no recortados) en el mayor textSize posible.

Este es mi TextView:

<android.support.v7.widget.AppCompatTextView
        android:id="@+id/vName"
        style="@style/TextView.AutoSize"
        android:layout_width="56dp"
        android:gravity="bottom|center_horizontal"
        android:maxLines="1"
        app:autoSizeMinTextSize="1px"
        app:autoSizeTextType="uniform"
        app:layout_constraintBottom_toTopOf="@id/vGuideline"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent" />

Desafortunadamente, la vista de texto está recortada. Quería establecer esta cadena como un texto en el TextView anterior: "Groupa" pero este es el resultado:

(TextView está dentro de ConstraintLayout con fondo de círculo amarillo).

Como se puede ver, la vista de texto no se redimensiona en absoluto. ¿Tienes idea de qué hacer?

Gracias.


Answers

Tuve el mismo problema. Lo resolví cambiando dos líneas en mi gradle: compile 'com.android.support:support-v4:26.0.1' y compile 'com.android.support:appcompat-v7:26.0.1' Para encajar textos más largos tienes para agregar las cuatro opciones, como esta:

<android.support.v7.widget.AppCompatTextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/your_string"
        app:autoSizeTextType="uniform"
        app:autoSizeMaxTextSize="13sp"
        app:autoSizeMinTextSize="5sp"
        app:autoSizeStepGranularity="1sp"/>

¿Ha intentado configurar los cuatro atributos descritos en el enlace que publicó?

P.ej

app:autoSizeTextType="uniform"
app:autoSizeMaxTextSize="13sp"
app:autoSizeMinTextSize="5sp"
app:autoSizeStepGranularity="1sp"

También puede intentar configurar el ancho y el alto para wrap_content, y establecer minWidth y maxWidth a 56dp.

Como posiblemente también se mencionó en los comentarios, las líneas máximas parecen causar problemas (para mí también), así que intente eliminar eso (el autoajuste probablemente debería encargarse de esto, reduciendo el tamaño del texto).


Si no sabes el tamaño de la vista de texto. por ejemplo, los coloca en linearlayout y establece la altura o el ancho en 0dp. entonces tengo una solucion debe establecer AutoSizeTextTypeWithDefaults en el evento OnSizeChanged.

@Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        this.setAutoSizeTextTypeWithDefaults(AUTO_SIZE_TEXT_TYPE_UNIFORM);

    }

Además de las otras respuestas correctas, encontré otro punto que impide el funcionamiento automático.

No use android:singleLine="true" junto con el cambio de tamaño automático. Utilice el nuevo android:maxLines="1" lugar.


En mi caso, el problema era algo muy estúpido: aunque el autoajuste siempre funcionaba bien para mí, en exactamente un TextView usé android: espacio de nombres en lugar de app: :! Estaba totalmente ajeno a mi error y me preguntaba por qué no funcionaba. Por lo tanto, cuando utilice un tema de AppCompat asegúrese siempre de usar los atributos de AppCompat , no los nativos.


Configura tu TextView esta manera

<TextView
    android:id="@+id/vName"
    android:layout_width="56dp"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:text="Groupa"
    app:autoSizeMinTextSize="12sp"
    app:autoSizeMaxTextSize="20sp"
    app:autoSizeTextType="uniform"
    />

Funciona bien en Android 22, 23, 26


¿Qué valor estableciste en el atributo android: layout_height?

En el documento : " Si establece el tamaño automático en un archivo XML, no se recomienda usar el valor" wrap_content "para los atributos layout_width o layout_height de TextView. Puede producir resultados inesperados " .


La altura y el ancho de TextView son contenido de la envoltura, entonces el texto dentro de la vista de texto siempre debe estar centrado, luego centre en su diseño principal usando:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Hello.."/>
</RelativeLayout>

Para LinearLayout también el código es el mismo:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello.."/>
</LinearLayout>

y de forma pro-gramática, el padre es RelativeLayout. Este código en tiempo de ejecución usa algo como esto en su actividad.

TextView textView1 =(TextView)findViewById(R.id.texView1);
RelativeLayout.LayoutParams layoutParams = RelativeLayout.LayoutParams)textView1.getLayoutParams();
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
textView1.setLayoutParams(layoutParams);






android android-textview android-support-library autosize android-8.0-oreo