Italic TextView met wrap_contents lijkt de tekst aan de rechterrand te knippen

Het lijkt een paar pixels uit het meest rechtse teken te knippen, in ieder geval op de 480×800-emulator of Nexus One.

Voor mij lijkt het op een bug, maar ik ben maar een Android-beginner.
Ik probeerde links en rechts marges toe te voegen, maar het bleef maar knippen.
Uiteindelijk was mijn hack eromheen om een ​​enkele spatie toe te voegen aan beide zijden van de tekst.
Nog andere oplossingen?


Antwoord 1, autoriteit 100%

android:layout_width="wrap_content", geeft u een rechthoek voor het renderen van verpakte inhoud.
Alles werkt goed voor normale tekst (niet-cursief).

Zodra u italic-tekst hebt ingeschakeld, zal de omwikkelde tekst proberen in de rechthoek te passen en daarom wordt het meest rechtse teken afgesneden, tenzij het niet kan worden geknipt (zoals ., ), 1, enz.)

De voorgestelde oplossing is om een ​​spatie aan het einde van de tekst te plaatsen (of iets beters ??)

PS:Dit geldt ook voor android:gravity="right"omdat de tekst helemaal naar rechts wordt gepusht. Als we italictekst hebben, hebben we hetzelfde probleem.


Antwoord 2, autoriteit 93%

U kunt ook het Unicode no-break spatieteken(\u00A0) gebruiken .


Antwoord 3, autoriteit 46%

Ik heb " \"toegevoegd aan het einde van alle strings in mijn strings.xml. \is het escape-teken, dus op deze manier zou ik het probleem kunnen oplossen, maar deze oplossing is smerig. Ik hoop dat dit helpt.


Antwoord 4, autoriteit 25%

Voeg gewoon een extra spatie toe aan het einde van de tekst. In XML moet u \u0020aan het einde toevoegen, omdat XML anders standaard witruimte aan het begin/einde negeert.


Antwoord 5, autoriteit 21%

Een andere oplossing gevonden (getest op 4.1.2 en 4.3 tijdens het gebruik van wrap_content). Als u de klasse TextViewof EditTextuitbreidt, kunt u de onMeasure-methode op deze manier overschrijven:

@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    final int measuredWidth = getMeasuredWidth();
    final float tenPercentOfMeasuredWidth = measuredWidth * 0.1f;
    final int newWidth = measuredWidth + (int) tenPercentOfMeasuredWidth;
    setMeasuredDimension(newWidth, getMeasuredHeight());
}

Antwoord 6, autoriteit 18%

Je kunt een HAIR SPACE aan je string toevoegen

<string name="hair_space">&#x200A;</string>
String hairSpace = getContext().getString(R.string.hair_space);
textView.setText(hairSpace + originalString + hairSpace)

Antwoord 7, autoriteit 11%

Een goede en schone oplossing:

Gebruik een cursief aangepast lettertype in plaats van textStyle=’italic’ in te stellen
Bijvoorbeeld:

<android.support.v7.widget.AppCompatTextView
            android:text="yolO"
            app:fontFamily="@font/roboto_italic"/>

Ik heb het niet op gewone TextView geprobeerd, maar uit mijn waarnemingen blijkt het probleem met textStyle=’italic’.

Werkt zonder enige hack!

Hier is een bewijs van het beschuldigen van textStyle-kenmerk:

Ik heb een aangepaste fontFamily en een gedefinieerd lettertype gemaakt voor normaal, vet en cursief

res/font/app_font_family.xml

<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
    <font app:fontStyle="normal" app:fontWeight="400" app:font="@font/roboto_regular"/>
    <font app:fontStyle="italic" app:fontWeight="400" app:font="@font/roboto_italic" />
    <font app:fontStyle="normal" app:fontWeight="700" app:font="@font/roboto_medium"/>
</font-family>

Als ik nu deze fontFamily gebruik en textStyle=’italic’ toepas, wordt het meest rechtse teken nog steeds afgekapt.

<android.support.v7.widget.AppCompatTextView
            android:text="yolO"
            app:fontFamily="@font/app_font_family"
            android:textStyle='italic' />

Dit is op API 23 met ondersteuningsbibliotheek 28.0.0 en Android Studio 3.2


Antwoord 8, autoriteit 7%

Dit geldt ook voor TextViews met een vaste breedte, niet alleen voor “wrap_content”. Ik weet niet zeker of het probleem versiespecifiek is, zoals sommige commentatoren hebben gezegd. Ik zie het probleem bij alle Honeycomb-versies. Van wat ik heb gezien, wordt het probleem niet opgelost door marge, opvulling, een vaste breedte of een echt cursief aangepast lettertype in te stellen.


Antwoord 9, autoriteit 7%

Toen ik naar de bron keek, ontdekte ik dat het plaatsen van een schaduw de rechthoek van de clip verlengt.

Een truc is om een ​​onzichtbare schaduw net achter het personage te plaatsen.

Bijvoorbeeld:

android:shadowRadius="2"
android:shadowDx="2"
android:shadowColor="#00000000"

Ik denk dat deze oplossing beter is omdat het de breedte van de TextViewniet vergroot, wat kan gebeuren als er een extra teken wordt toegevoegd (wat duidelijker is bij een achtergrond).


Antwoord 10, autoriteit 4%

Dit is mijn oplossing: Tekstweergave formatteren en meten. Stel daarna de breedte van de tekstweergave in met 1 pixel, voeg toe aan de gemeten breedte.

TextView textView = new TextView(this);
textView.setText("Text blah blah");
textView.setTypeface(typeface, Typeface.BOLD_ITALIC)
textView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
textView.setLayoutParams(new LayoutParams(textView.getMeasuredWidth() + 1, 
                                             LayoutParams.WRAP_CONTENT));

Werkt voor mij. Ik hoop dat deze helpen.


Antwoord 11

Ik had hetzelfde probleem en gebruikte een vaste spatie-entiteit via HTML:

textView.setText("Magnifico" + Html.fromHtml("&nbsp;");

Antwoord 12

Het lijkt mij dat als je cursief programmatisch toepast, de inhoud correct wordt ingepakt. Stel het lettertype van de TextView dus handmatig in, b.v. in kotlin:

textView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.ITALIC)

Antwoord 13

Hoewel ik over het algemeen de voorkeur geef aan sziraqui’s antwoorddat suggereert om een ​​echt cursief lettertype te gebruiken, zijn deze niet altijd beschikbaar.< br>
Omdat het probleem wordt veroorzaakt door de verkeerde meting van de tekstgrenzen, heb ik gewoon android:layout_width="0dp"ingesteld, waardoor de TextView zoveel horizontale ruimte krijgt als nodig is. Dit is misschien ook niet onder alle omstandigheden ideaal, maar het is een eenvoudige en niet al te hackachtige oplossing voor veel situaties.


Antwoord 14

Voeg een 3dp-padding toe aan de rechterkant van uw TextView. Ik heb het geprobeerd met 1dp en 2dp, maar 3dp leek de slag te slaan.

android:paddingRight="3dp"

Other episodes