Comment supprimer l'espace supérieur et inférieur sur la vue de texte d'Android

Lorsque j'inclus le XML ci-dessous, je peux voir l'image ci-dessous. Si vous le voyez, vous pouvez vous rendre compte que TextView a un espace supérieur et inférieur.

 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="E1" android:background="#ff00ff00"/> 

Entrez la description de l'image ici

  • Android Market - Temps d'attente entre deux mises à jour
  • Le système de fichiers change en Android Nougat
  • Comment résoudre le périphérique ADB non autorisé dans un périphérique hôte ADB Android?
  • Android: comment fermer la boîte de dialogue de progression lorsque vous appuyez sur le bouton Précédent
  • Pourquoi l'application ne se reconnecte-elle pas au périphérique BLE lorsque Set AutoConnect à true dans Android?
  • Fonction similaire SwingUtilities.invokeLater in android?
  • Je souhaite supprimer l'espace. Comment l'enlever? Comment appelle-t-on ceci? Si quelqu'un a l'indice … laissez-moi savoir. Merci d'avance.

  • L'intention de la caméra tourne automatiquement à 90 degrés
  • Comment reprendre Fragment de BackStack s'il existe
  • Pourquoi étendre une classe Application?
  • Comment créer un fichier excel dans Android?
  • Le chargeur d'images universel ne parvient pas à charger des images parfois
  • Validation du numéro de téléphone Android
  • 13 Solutions collect form web for “Comment supprimer l'espace supérieur et inférieur sur la vue de texte d'Android”

    Essayez android:includeFontPadding="false" pour voir si cela vous aide. Dans mon expérience, cela aidera un peu, mais il n'y a aucun moyen de réduire les dimensions TextView à la taille de texte exacte par pixel.

    La seule alternative, qui peut ou non donner de meilleurs résultats, est de tricher un peu et de câbler les dimensions pour correspondre à la taille du texte, par exemple "24sp" au lieu de "wrap_content" pour la hauteur.

    Essayez de définir vos marges inférieures et supérieures à un négatif.

    quelque chose comme ça:

     android:layout_marginTop="-5dp" android:layout_marginBottom="-5dp" 

    Ajustez les valeurs en conséquence.

    J'ai eu le même problème. Attribut android:includeFontPadding="false" ne fonctionne pas pour moi. J'ai résolu ce problème de cette façon:

     public class TextViewWithoutPaddings extends TextView { private final Paint mPaint = new Paint(); private final Rect mBounds = new Rect(); public TextViewWithoutPaddings(Context context) { super(context); } public TextViewWithoutPaddings(Context context, AttributeSet attrs) { super(context, attrs); } public TextViewWithoutPaddings(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(@NonNull Canvas canvas) { final String text = calculateTextParams(); final int left = mBounds.left; final int bottom = mBounds.bottom; mBounds.offset(-mBounds.left, -mBounds.top); mPaint.setAntiAlias(true); mPaint.setColor(getCurrentTextColor()); canvas.drawText(text, -left, mBounds.bottom - bottom, mPaint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); calculateTextParams(); setMeasuredDimension(mBounds.width() + 1, -mBounds.top + 1); } private String calculateTextParams() { final String text = getText().toString(); final int textLength = text.length(); mPaint.setTextSize(getTextSize()); mPaint.getTextBounds(text, 0, textLength, mBounds); if (textLength == 0) { mBounds.right = mBounds.left; } return text; } } 

    Je voulais simplement ajouter à la réponse de DynamicMind que la raison pour laquelle vous voyez l'espacement autour de vos TextViews est de remplacer dans les arrière-plans de 9 patchs qu'ils utilisent par défaut.

    La technologie 9-patch vous permet de spécifier une zone de contenu qui est, efficacement, le rembourrage. Ce rembourrage est utilisé à moins que vous définissiez le rembourrage de la vue explicitement. Par exemple, lorsque vous définissez par programme un arrière-plan de 9 patch à une vue qui a été configurée, elles sont remplacées. Et vice-versa, si vous définissez des rembourrages, ils remplacent ce qui a été défini par l'arrière-plan du patch.

    Malheureusement, dans la disposition XML, il n'est pas possible de déterminer l'ordre de ces opérations. Je pense que le retrait de l'arrière-plan de votre TextViews aiderait:

     android:background="@null" 

    J'ai eu le même problème. Voici une bonne réponse: comment aligner le texte en haut de TextView?

    Mais le code est peu fini et ne supporte pas toutes les tailles de police. Changer la ligne

     int additionalPadding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getContext().getResources().getDisplayMetrics()); 

    à

     int additionalPadding = getTextSize() - getLineHeight(); 

    Le code C # complet (mono) supprime le décalage supérieur:

     public class TextControl : TextView { public TextControl (Context context) : base (context) { SetIncludeFontPadding (false); Gravity = GravityFlags.Top; } protected override void OnDraw (Android.Graphics.Canvas canvas) { if (base.Layout == null) return; Paint.Color = new Android.Graphics.Color (CurrentTextColor); Paint.DrawableState = GetDrawableState (); canvas.Save (); var offset = TextSize - LineHeight; canvas.Translate (0, offset); base.Layout.Draw (canvas); canvas.Restore (); } } 
     public class TopAlignedTextView extends TextView { public TopAlignedTextView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TopAlignedTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs); setIncludeFontPadding(false); //remove the font padding setGravity(getGravity() | Gravity.TOP); } @Override protected void onDraw(Canvas canvas) { TextPaint textPaint = getPaint(); textPaint.setColor(getCurrentTextColor()); textPaint.drawableState = getDrawableState(); canvas.save(); //remove extra font padding int yOffset = getHeight() - getBaseline(); canvas.translate(0, - yOffset / 2); if (getLayout() != null) { getLayout().draw(canvas); } canvas.restore(); } } 

    C'est le code qui a sauvegardé notre journée. Il a été adapté du code mono C # de maksimko:

     public class TopAlignedTextView extends TextView { public TopAlignedTextView(Context context) { super(context); } /*This is where the magic happens*/ @Override protected void onDraw(Canvas canvas){ float offset = getTextSize() - getLineHeight(); canvas.translate(0, offset); super.onDraw(canvas); } } 

    Je devais encore jouer à textView.setIncludeFontPadding(false) car nous TextViews avec différentes tailles de police.

    Avez-vous défini une marge de mise en page? Par exemple:

     android:layout_marginTop="5dp" 

    Sinon, si votre vue de texte est enveloppée à l'intérieur d'un LinearLayout ou d'un autre conteneur, alors ce froid comporte soit un rembourrage, soit une marge.

     android:background="@android:drawable/editbox_background" 

    Utilisez-le selon que vous le modifiez que vous souhaitez éditerbox_background. Parce que Android fournit une certaine construction en arrière-plan, comme le code ci-dessus, choisit selon vos besoins. Peut-être que cela vous aide pleinement.

    Dans un LinearLayout, le rembourrage par défaut pourrait être un problème. Essayez de l'ajuster à 0dp. Cela a fonctionné pour moi.

    La réponse du code TopAlignedTextView : TopAlignedTextView @ GitHub

    Utilisez-le par mise en page:

     <com.github.captain_miao.view.TopAlignedTextView android:id="@+id/text_a" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="@dimen/activity_horizontal_margin" android:text="@string/text_demo_a" /> 

    Entrez la description de l'image ici

    Ma façon de résoudre ce problème est très difficile, mais j'ai réussi à faire passer le texte là où je le voulais en définissant la hauteur de la vue du texte comme étant statique et joue avec elle jusqu'à ce qu'elle soit juste à la hauteur du texte. Dans mon cas, le style de police que j'utilise avait une hauteur de 64 sp, donc j'ai réglé la hauteur de ma vision de texte à 50sp et ça a bien fonctionné. J'ai également dû mettre la gravité au premier plan en bas.

    Peut-être que c'est une réponse trop tard, mais vous pouvez essayer une fonctionnalité pour supprimer l'espace de haut en bas. Cela fonctionne également pour EditText pour supprimer l'espace par défaut en haut et en bas du texte à l'intérieur de EditText.

     android:paddingTop="0dp" android:paddingBottom="0dp" 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.