<TextView Android:id="@+id/prodLbl"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true"
Android:textColor="#FFFFFF"
Android:textSize="30dip"
Android:textStyle="italic"
Android:text="Magnifico"
/>
Semble couper quelques pixels du personnage le plus à droite, au moins sur un émulateur 480x800 ou Nexus One.
Pour moi, cela ressemble à un bug, mais je ne suis qu'un débutant sous Android. J'ai essayé d'ajouter des marges à gauche et à droite, mais cela continuait à couper. En fin de compte, mon but était d'ajouter un seul espace des deux côtés du texte. Toute autre solution?
Vous pouvez également utiliser le caractère Unicode d'espacement absolu } _ (\ u00A0).
Android:layout_width="wrap_content"
, vous donne un rectangle pour le rendu du contenu encapsulé. Tout fonctionnera bien pour un texte normal (non italique).
Une fois que vous avez activé le texte italic
, le texte enveloppé essaiera de tenir dans le rectangle et le caractère le plus à droite sera alors coupé sauf s'il est non coupable (tel que .
, )
, 1
, etc.).
La solution suggérée est d'avoir un espace à la fin du texte (ou quelque chose de mieux ??)
PS: Ceci s'applique également à Android:gravity="right"
car le texte sera poussé à l'extrême droite. Si nous avons du texte italic
, nous sommes confrontés au même problème.
J'ai ajouté " \"
à la fin de toutes les chaînes de mon chaîne.xml. \
est le caractère d'échappement, donc de cette façon je pourrais venir sur le problème, mais cette solution est méchante. J'espère que cela t'aides.
Ajoutez simplement un espace supplémentaire à la fin du texte. En XML, vous devrez ajouter \u0020
à la fin, sinon XML ignore les espaces au début/à la fin par défaut.
Une autre solution a été trouvée (testée sur 4.1.2 et 4.3 en utilisant wrap_content
). Si vous étendez la classe TextView
ou EditText
, vous pouvez remplacer la méthode onMeasure
de cette façon:
@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());
}
Vous pouvez ajouter un espace de cheveux à votre chaîne
<string name="hair_space"> </string>
String hairSpace = getContext().getString(R.string.hair_space);
textView.setText(hairSpace + originalString + hairSpace)
Cela s'applique également aux TextViews à largeur fixe, et pas seulement à "wrap_content". Je ne sais pas si le problème est spécifique à la version, comme certains commentateurs l'ont mentionné. Je vois le problème sur toutes les versions de Honeycomb. D'après ce que j'ai vu, le problème ne disparaît pas en définissant des marges, un remplissage, en utilisant une police de caractères à largeur fixe ou personnalisée.
En regardant la source, j'ai découvert que le fait de définir une ombre étendait le rectangle du clip.
Une astuce consiste à définir une ombre invisible juste au-delà du personnage.
Par exemple:
Android:shadowRadius="2"
Android:shadowDx="2"
Android:shadowColor="#00000000"
Je pense que cette solution est meilleure car elle n'augmentera pas la largeur de la variable TextView
, ce qui peut arriver lors de l'ajout d'un caractère supplémentaire (ce qui est plus apparent avec un arrière-plan).
Voici ma solution: Formater textview et mesurer. Après cela, définissez la largeur de textview avec 1 pixel, ajoutez à la largeur mesurée.
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));
Travailler pour moi J'espère que ces aide.
Une solution propre et propre:
Utilisez une police personnalisée en italique au lieu de définir textStyle = 'italic' Par exemple:
<Android.support.v7.widget.AppCompatTextView
Android:text="yolO"
app:fontFamily="@font/roboto_italic"/>
Je n'ai pas essayé sur TextView standard, mais d'après mes observations, le problème est avec textStyle = 'italic'.
Fonctionne sans aucun piratage!
Voici une preuve d'attribut de blaming textStyle:
J'ai créé une police de caractères fontFamily et définie pour les caractères normaux, gras et italiques.
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>
Maintenant, lorsque j'utilise cette fontFamily et que j'applique textStyle = 'italic', le caractère le plus à droite est toujours tronqué.
<Android.support.v7.widget.AppCompatTextView
Android:text="yolO"
app:fontFamily="@font/app_font_family"
Android:textStyle='italic' />
Ceci est sur Api 23 avec la bibliothèque de support 28.0.0 et Android Studio 3.2
J'ai également eu le même problème et utilisé une entité d'espace insécable via HTML:
textView.setText("Magnifico" + Html.fromHtml(" ");
Ajoutez un remplissage 3DP à droite sur votre TextView. J'ai essayé avec 1dp et 2dp, mais 3dp semblait faire l'affaire pleinement.
Android:paddingRight="3dp"