Ridimensiona automaticamente TextView

Con Android 8.0 (livello API 26) e versioni successive, puoi indicare una TextView per applicare la dimensione del testo si espanda o si contragga automaticamente per riempire il layout in base Caratteristiche e confini di TextView. Questa impostazione semplifica ottimizzare le dimensioni del testo su schermi diversi con contenuti dinamici.

Support Library 26.0 supporta completamente il TextView con ridimensionamento automatico su dispositivi con Android 8.0 (livello API 26) o versioni precedenti. Il pacchetto android.support.v4.widget contiene TextViewCompat per accedere alle caratteristiche in modo compatibile con le versioni precedenti.

Imposta la dimensione automatica di TextView

Puoi utilizzare il framework o la libreria di supporto per configurare il ridimensionamento automatico TextView in modo programmatico o in XML. A Impostare gli attributi XML, puoi anche usare le Proprietà in Android Studio.

Esistono tre modi per configurare il ridimensionamento automatico di TextView: descritti nelle sezioni seguenti:

Nota: se imposti il ridimensionamento automatico in un file XML, si consiglia di utilizzare il valore "wrap_content" per Attributi layout_width o layout_height di un TextView. Questo potrebbe produrre risultati imprevisti.

Predefinito

L'impostazione predefinita consente il ridimensionamento automatico della scala TextView in modo uniforme sugli assi orizzontale e verticale.

  • Per definire l'impostazione predefinita in modo programmatico, chiama il metodo setAutoSizeTextTypeWithDefaults(int autoSizeTextType) . Specifica AUTO_SIZE_TEXT_TYPE_NONE per la disattivazione la funzionalità di ridimensionamento automatico o AUTO_SIZE_TEXT_TYPE_UNIFORM per ridimensiona in modo uniforme gli assi orizzontale e verticale.
  • Nota: le dimensioni predefinite per l'uniformità sono minTextSize = 12sp, maxTextSize = 112sp e granularity = 1px.

  • Per definire l'impostazione predefinita in XML, utilizza lo spazio dei nomi android e imposta autoSizeTextType a nessuno oppure uniforme.
  • <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform" />
    

Definisci l'impostazione predefinita utilizzando la Libreria di supporto

  • Per definire l'impostazione predefinita in modo programmatico tramite la libreria di supporto, chiama il TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType) . Fornisci un'istanza del widget TextView e uno dei tipi di testo, come TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE o TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM.
  • Per definire l'impostazione predefinita in XML tramite la Libreria di supporto, utilizza app e imposta autoSizeTextType su nessuno o uniforme.
  • <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
      <TextView
          android:layout_width="match_parent"
          android:layout_height="200dp"
          app:autoSizeTextType="uniform" />
    
    </LinearLayout>
    

Granularità

Puoi definire un intervallo di dimensioni minime e massime del testo, che specifica la dimensione di ogni passaggio. La TextView scala in modo uniforme in un intervallo tra gli attributi dimensione minima e massima. Ogni incremento avviene come passo dimensioni impostate nell'attributo di granularità.

  • Per definire in modo programmatico un intervallo di dimensioni di testo e una dimensione, richiama il setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) . Specifica il valore massimo, il valore minimo e la granularità e qualsiasi valore TypedValue come unità di misura.
  • Per definire un intervallo di dimensioni del testo e una dimensione in XML, utilizza l'android e imposta lo spazio dei nomi i seguenti attributi:
    • Imposta il parametro autoSizeTextType su nessuno o uniforme. Il valore none è l'impostazione predefinita e uniform consente TextView in modo uniforme su orizzontali e verticali.
    • Imposta autoSizeMinTextSize, autoSizeMaxTextSize, e autoSizeStepGranularity per definire le dimensioni per il dimensionamento automatico TextView.
  • <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform"
        android:autoSizeMinTextSize="12sp"
        android:autoSizeMaxTextSize="100sp"
        android:autoSizeStepGranularity="2sp" />
    

Definizione della granularità utilizzando la libreria di supporto

  • Per definire un intervallo di dimensioni di testo e una dimensione in modo programmatico mediante il Support Library, chiama il TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) . Indica il valore massimo, il valore minimo e il valore di granularità e qualsiasi unità di dimensione TypedValue.
  • Per definire un intervallo di dimensioni del testo e una dimensione in XML tramite Libreria, utilizza lo spazio dei nomi app e imposta autoSizeText, autoSizeMinTextSize autoSizeMaxTextSize e autoSizeStepGranularity nel file XML di layout.
  • <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
      <TextView
          android:layout_width="match_parent"
          android:layout_height="200dp"
          app:autoSizeTextType="uniform"
          app:autoSizeMinTextSize="12sp"
          app:autoSizeMaxTextSize="100sp"
          app:autoSizeStepGranularity="2sp" />
    
    </LinearLayout>
    

Dimensioni preimpostate

Le dimensioni preimpostate ti consentono di specificare i valori TextView effettua la selezione per il ridimensionamento automatico del testo.

  • Per utilizzare le dimensioni preimpostate per configurare il ridimensionamento automatico TextView in modo programmatico, chiama setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit) . Fornisci un array di dimensioni e qualsiasi TypedValue unità di misura per la dimensione.
  • Per utilizzare le dimensioni preimpostate per configurare il ridimensionamento automatico TextView in XML, usa android e imposta i seguenti attributi:
      .
    • Imposta autoSizeTextType su nessuno o uniforme. Quello nessuno è il valore predefinito, mentre uniform consente TextView in modo uniforme su orizzontali e verticali.
    • Imposta il parametro autoSizePresetSizes a un array di dimensioni preimpostate. Per accedere all'array come risorsa, definisci l'array nella classe res/values/arrays.xml .
  • <resources>
      <array name="autosize_text_sizes">
        <item>10sp</item>
        <item>12sp</item>
        <item>20sp</item>
        <item>40sp</item>
        <item>100sp</item>
      </array>
    </resources>
    
    <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform"
        android:autoSizePresetSizes="@array/autosize_text_sizes" />
    

Configurare le dimensioni preimpostate utilizzando la libreria di supporto

  • Per utilizzare le dimensioni preimpostate per configurare il ridimensionamento automatico TextView in modo programmatico tramite la libreria di supporto, richiama TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit) . Fornisci un'istanza della classe TextView, un array di dimensioni e qualsiasi unità di dimensione TypedValue per le dimensioni.
  • Per utilizzare le dimensioni preimpostate per configurare il ridimensionamento automatico TextView in XML tramite la Libreria di supporto, usa i app e imposta autoSizeTextType e autoSizePresetSizes nel file XML di layout.
  • <resources>
      <array name="autosize_text_sizes">
        <item>10sp</item>
        <item>12sp</item>
        <item>20sp</item>
        <item>40sp</item>
        <item>100sp</item>
      </array>
    </resources>
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
      <TextView
          android:layout_width="match_parent"
          android:layout_height="200dp"
          app:autoSizeTextType="uniform"
          app:autoSizePresetSizes="@array/autosize_text_sizes" />
    </LinearLayout>
    

Risorse aggiuntive

Per ulteriori informazioni sul dimensionamento automatico di un TextView quando si utilizza una campagna dinamica contenuti, guardare Android Jetpack: ridimensionamento automatico del TextView.