Automatisering van TextView werkt niet (Android O)

Ik gebruik de nieuwe functie voor automatisch aanpassen die is toegevoegd in ondersteuningsbibliotheek 26. Ik lees een documentatie die hier te vinden is:
https://developer.android.com/preview/features/autosizing-textview.html

Ik veronderstel dat het op deze manier zou moeten werken: je kunt automatische grootte inschakelen met dit kenmerk: app:autoSizeTextType="uniform". Ik denk dat TextViewalle beschikbare ruimte moet gebruiken om een ​​hele tekst weer te geven (niet alleen een deel – het mag niet worden bijgesneden) en de textSizemoet zo groot mogelijk zijn . Als u een maximum- of minimumgrootte van de tekst moet beperken, kunt u deze twee kenmerken gebruiken:

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

of

app:autoSizeMaxTextSize="XXsp"

Tot nu toe gaat het goed. Laten we zeggen dat ik een TextView nodig heb met een breedte van 56 dp. Ik heb teksten met een andere lengte en ik wil deze teksten op deze TextViewzetten. De grootte zou automatisch moeten worden aangepast, zodat de hele tekst (alle tekens + niet bijgesneden) wordt weergegeven in de grootst mogelijke textSize.

Dit is mijn 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" />

Helaas is de tekstweergave bijgesneden. Ik wilde deze String instellen als een tekst naar de TextView hierboven: “Groupa” maar dit is het resultaat:
voer hier de afbeeldingsbeschrijving in

(TextView bevindt zich binnen ConstraintLayout met gele cirkel als achtergrond.)

Zoals je kunt zien is de tekstweergave helemaal niet aangepast. Heb je enig idee wat je moet doen?

Bedankt.


Antwoord 1, autoriteit 100%

Aanvullend op de andere juiste antwoorden heb ik nog een punt gevonden waardoor autosizing niet werkt.

Gebruik android:singleLine="true"niet samen met autosizing. Gebruik in plaats daarvan de nieuwere android:maxLines="1".


Antwoord 2, autoriteit 96%

Ik heb dit voor een paar situaties getest en kom tot de onderstaande conclusie:

Je moet begrensde breedte enhoogte hebben. Als je bijvoorbeeld de breedte instelt op match_parentmaar wrap_contentvoor de hoogte, denk ik dat Android niet weet hoe hoog je je tekst wilt uitrekken. In jouw voorbeeld heb je geen specifieke lengte, dus ik denk dat het daarom niet werkt.

Bijvoorbeeld:

inhoudshoogte voor een tekst inpakken

specifieke hoogte voor een tekst

Ik weet niet waarom het officiële Android-document wrap_content als voorbeeld zou gebruiken…

En zoals je kunt zien heb ik in mijn voorbeeld geen andere attributen gebruikt, dus het is waarschijnlijk niet het probleem van onjuiste attributen.

En ja, de TextView die ik gebruik is android.support.v7.widget.AppCompatTextView.

En zolang je ondersteuningsbibliotheek 26.0.0 of hoger gebruikt, is het goed genoeg.

BEWERKEN:

Voor ConstraintLayoutgeldt hetzelfde principe.
U moet zowel een begrensde breedte als hoogte hebben, wat een van de onderstaande betekent voor elke dimensie:

  1. U heeft een absolute waarde opgegeven voor die dimensie (breedte of hoogte)

  2. U heeft de beperking in beide richtingen ingesteld

Bijvoorbeeld:

Alle 4 richtingen zijn beperkt
Hoogte ingesteld op een absolute waarde
Breedte ingesteld op een absolute waarde

UPDATE: (21-09-2017)

Ik heb getest dat het helaas lijkt alsof het nog geen aangepast lettertype ondersteunt, wat een functie is die samen is gepubliceerd in ondersteuningsbibliotheek v26…


Antwoord 3, autoriteit 18%

Ik had hetzelfde probleem.
Ik heb het opgelost door twee regels in mijn gradle te veranderen:
compile 'com.android.support:support-v4:26.0.1'en
compile 'com.android.support:appcompat-v7:26.0.1'
Om langere teksten te laten passen, moet je alle vier de opties toevoegen, zoals deze:

<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"/>

Antwoord 4, autoriteit 16%

Welke waarde heb je ingesteld op android:layout_height attribuut?

Van het document: “Als u automatische grootte instelt in een XML-bestand, wordt het niet aanbevolen om de waarde “wrap_content” te gebruiken voor de attributen layout_width of layout_height van een TextView. Dit kan onverwachte resultaten opleveren.>”

Ik heb ook een tutorial gemaakt over Het automatisch aanpassen van TextView hier.


Antwoord 5, autoriteit 11%

In mijn geval was er iets heel stoms aan de hand: hoewel autosizing altijd goed werkte voor mij, gebruikte ik op precies één TextView de android:namespace in plaats van app:! Ik was me totaal niet bewust van mijn fout en bleef me afvragen waarom het niet werkte. Dus als u een AppCompat-thema gebruikt, zorg er dan altijd voor dat u de AppCompat-kenmerken gebruikt, niet de oorspronkelijke.


Antwoord 6, autoriteit 11%

Aanvullende informatie bij het geaccepteerde antwoord van @Sira Lam:

Zorg er altijd voor dat u geen kenmerken overneemt die het gedrag van AutoTextSize kunnen conflicteren, met name android:singleLine.

Hoewel android:maxLinesof android:linesnietde TextViewbelemmeren om de juiste grootte te singleLine-kenmerk (indien ingesteld op true) schakelt automatisch formaat uit.

Dus probeer bij het opsporen van een AutoTextSize-probleem eerst te zoeken naar het kenmerk singleLine, omdat het soms wordt overgenomen bij het uitbreiden van Button.


Antwoord 7, autoriteit 7%

Zorg ervoor dat u deze opties aanvinkt om autoSizete laten werken:

  • Gebruik wrap_contentin geen enkele dimensie (zoals layout_widthen layout_height)
  • Zorg ervoor dat u geen singleLinegebruikt, maar android:maxLines
  • Gebruik app:autosizexxxin plaats van android:autosizexxxom oudere Android-versies te ondersteunen
  • Automatisch formaat werkt in zowel AppCompatTextViewals TextView, dus u hoeft uw weergave niet te wijzigen

Antwoord 8, autoriteit 5%

Heb je geprobeerd alle vier de kenmerken in te stellen die worden beschreven in de link die je hebt gepost?

Bijvoorbeeld

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

Je kunt ook proberen om zowel de breedte als de hoogte in te stellen op wrap_content, en minWidth en maxWidth in te stellen op 56dp.

Zoals mogelijk ook vermeld in de opmerkingen, lijkt maxlines problemen te veroorzaken (voor mij ook), dus probeer dat te verwijderen (de automatische grootte zou dit waarschijnlijk moeten oplossen, door de tekstgrootte te verkleinen).

Other episodes