How to remove the top and bottom space on textview of Android How to remove the top and bottom space on textview of Android android android

How to remove the top and bottom space on textview of Android


Try android:includeFontPadding="false" to see if it helps. In my experience that will help a little bit, but there's no way of reducing the TextView dimensions to the exact pixel-perfect text size.

The only alternative, which may or may not give better results, is to cheat a bit and hard-wire the dimensions to match the text size, e.g. "24sp" instead of "wrap_content" for the height.


I had the same problem. Attribute android:includeFontPadding="false" does not work for me. I've solved this problem in this way:

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;    }}


android:includeFontPadding="false" is pretty good but it does not get it precisely. sometimes you want border line accuracy so you can figure it out yourself by applying negative margins:

try setting your bottom and top margins to a negative value.

something like this:

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

adjust the values accordingly.