Quand j'ai un TextView
avec un \n
dans le texte, à droite j'ai deux singleLine
TextView
s, l'un en dessous de l'autre sans aucun espacement entre les deux. J'ai défini ce qui suit pour les trois TextView
s.
android:lineSpacingMultiplier="1"
android:lineSpacingExtra="0pt"
android:paddingTop="0pt"
android:paddingBottom="0pt"
La première ligne de la gauche TextView
s'aligne parfaitement avec le haut à droite TextView
.
La deuxième ligne de gauche TextView
est un peu plus haute que la deuxième ligne en bas à droite TextView
.
Il semble qu'il y ait une sorte de rembourrage caché en haut et en bas du TextView
s. Comment puis-je supprimer cela?
Réponses:
ou dans
XML
ce serait:Définissez si le
TextView
rembourrage supérieur et inférieur supplémentaire comprend pour faire de la place aux accents qui dépassent la montée et la descente normales. La valeur par défaut est vraie.la source
1dp
rembourrage haut / bas, je me trompe? (J'utiliseDeveloper options -> Show layout bounds
)includeFontPadding="false"
ne supprime pas une partie de l'espace, mais pas tout. très étrange.includeFontPadding
est idéal pour supprimer tout remplissage supplémentaire de la police elle-même, mais cela peut provoquer des problèmes dans les langues qui ont des ascendants et des descendants. Je m'assurerais que si vous faites cela, vous testez des langues comme l'espagnol et le thaï si vous les supportez.Je ressens ta douleur. J'ai essayé toutes les réponses ci-dessus, y compris le
setIncludeFontPadding
faux, ce qui n'a rien fait pour moi.Ma solution?
layout_marginBottom="-3dp"
sur leTextView
vous donne une solution pour le fond, BAM!Bien que -3dp sur
layout_marginTop
échoue .... ugh.la source
J'ai beaucoup cherché la bonne réponse, mais je n'ai trouvé aucune réponse qui pourrait exactement supprimer tout le rembourrage du
TextView
, mais finalement après avoir parcouru le document officiel, j'ai trouvé un moyen de contourner les textes sur une seule ligne.L'ajout de ces deux lignes à
TextView
xml fera le travail.Le premier attribut supprime le remplissage réservé aux accents et le deuxième attribut supprime l'espacement réservé pour maintenir un espace approprié entre deux lignes de texte.
la source
fontPath
attribut?Si vous utilisez
AppCompatTextView
(ou àAPI 28
partir de maintenant), vous pouvez utiliser la combinaison de ces 2 attributs pour supprimer l'espacement sur la première ligne:XML
Kotlin
la source
Cela m'a énervé aussi, et la réponse que j'ai trouvée était qu'il y a en fait de l'espace supplémentaire dans la police elle-même, pas dans TextView. C'est assez irritant, venant d'un arrière-plan de publication de documents, le peu de contrôle que vous avez avec Android sur les éléments typographiques. Je recommanderais d'utiliser une police de caractères personnalisée (telle que Bitstream Vera Sans, qui est autorisée pour la redistribution) qui peut ne pas avoir ce problème. Je ne sais pas exactement si oui ou non, cependant.
la source
Vous pouvez essayer d'utiliser cet attribut (ConstraintLayout):
layout_constraintBaseline_toBaselineOf
Comme ça:
la source
Je supprime l'espacement dans ma vue personnalisée - NoPaddingTextView.
https://github.com/SenhLinsh/NoPaddingTextView
la source
Avec une ImageView supplémentaire, nous pouvons définir TextView pour qu'il soit aligné sur la ligne de base avec ImageView et définir la valeur
android:baselineAlignBottom
de ImageView sur true, ce qui rendra la ligne de base d'ImageView au fond. D'autres vues peuvent s'aligner en utilisant le bas de l'ImageView qui lui-même est identique à la ligne de base de TextView.Cela ne fixe cependant que le bas du rembourrage et non le haut.
la source
Je pense que ce problème peut être résolu de cette façon:
Voilà les résultats:
ScreenShot-1
ScreenShot-3
Bien que la ligne de caractères spéciaux dans rightLowerText semble un peu plus élevée que la deuxième ligne de leftText, leurs lignes de base sont toujours alignées.
la source
Étant donné que mon exigence est de remplacer le textView existant
findViewById(getResources().getIdentifier("xxx", "id", "android"));
, je ne peux donc pas simplement essayer uneonDraw()
autre réponse.Mais je viens de comprendre les étapes correctes pour résoudre mon problème, voici le résultat final de Layout Inspector:
Puisque ce que je voulais, c'est simplement supprimer les espaces supérieurs, donc je n'ai pas à choisir une autre police pour supprimer les espaces inférieurs.
Voici le code critique pour le corriger:
La première clé est la police personnalisée "fonts / myCustomFont.otf" qui a l'espace en bas mais pas en haut, vous pouvez facilement le comprendre en ouvrant le fichier otf et en cliquant sur n'importe quelle police dans Android Studio:
Comme vous pouvez le voir, le curseur en bas a un espacement supplémentaire mais pas en haut, donc cela a résolu mon problème.
La deuxième clé est que vous ne pouvez pas simplement ignorer le code , sinon cela pourrait ne pas fonctionner. C'est la raison pour laquelle vous pouvez trouver certaines personnes commenter qu'une réponse fonctionne et d'autres personnes commentent que cela ne fonctionne pas.
Illustrons ce qui se passera si j'en supprime un.
Sans
setTypeface(mfont);
:Sans
setPadding(0, 0, 0, 0);
:Sans
setIncludeFontPadding(false);
:Sans 3 d'entre eux (c'est-à-dire l'original):
la source
La seule chose qui a fonctionné est
la source
XML mis à jour
la source
Une méthode simple a fonctionné:
Si cela n'a pas fonctionné, essayez d'ajouter ceci au-dessus de ce code:
Si vous avez besoin de plusieurs lignes, vous devrez peut-être calculer exactement la hauteur du rembourrage en haut et en bas via TextView ligne unique temporaire (avant et après la suppression du rembourrage), puis appliquez le résultat de la diminution de la hauteur avec un rembourrage négatif ou une disposition fantôme avec la traduction Y. Lol
la source
Vous voudrez peut-être essayer d'aligner le bas de la vue de texte gauche avec le bas de la 2e vue de texte droite.
la source
À ma connaissance, cela est inhérent à la plupart des widgets et la quantité de "rembourrage" diffère selon les fabricants de téléphones. Ce remplissage est vraiment un espace blanc entre la bordure de l'image et l'image dans le fichier d'image de 9 patchs.
Par exemple sur mon Droid X, les widgets de spinner obtiennent un espace blanc supplémentaire par rapport aux boutons, ce qui le rend gênant lorsque vous avez un spinner en ligne avec un bouton, mais sur le téléphone de ma femme, la même application n'a pas le même problème et a fière allure!
La seule suggestion que j'aurais est de créer vos propres 9 fichiers de patch et de les utiliser dans votre application.
Ahhh les douleurs qui sont Android.
Modifié: clarifier le rembourrage par rapport à l'espace blanc.
la source
Cette astuce a fonctionné pour moi (pour min-sdk> = 18 ).
J'ai utilisé
android:includeFontPadding="false"
et une marge négative commeandroid:layout_marginTop="-11dp"
et mis mon à l'TextView
intérieur d'unFrameLayout
( ou tout ViewGroup ... )et enfin des exemples de codes:
la source
Regarde ça:
Aligner ImageView avec EditText horizontalement
Il semble que l'image d'arrière-plan de EditText comporte des pixels transparents qui ajoutent également un remplissage.
Une solution consiste à remplacer l'arrière-plan par défaut de EditText par autre chose (ou rien, mais aucun arrière-plan pour un EditText n'est probablement pas acceptable). Cela peut être fait en définissant l'attribut XML android: background.
la source
Utilisez simplement
la source
Utilisez-le dans votre xml ImageView
android: adjustViewBounds = "true"
la source