繁体   English   中英

如何删除textView的顶部和底部填充?

[英]How to remove top and bottom padding on a textView?

我有一个textView,我想删除文本顶部和底部的所有填充和多余的空间。 这是我的XML:

            <TextView
                android:id="@+id/stid"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:fontFamily="@font/quicksand"
                android:gravity="center_horizontal"
                android:includeFontPadding="false"
                android:maxLines="1"
                android:text="@string/st"
                android:textSize="40sp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.538"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

我正在包装内容并删除字体填充,但是在要删除的文本的顶部和底部仍然有较大的填充。 (在侧面,顶部和底部都可以)

这是要求的屏幕截图

在此处输入图片说明

你试过了吗?

android:includeFontPadding="false"
android:lineSpacingExtra="-5dp"

使用此类并编译您的项目。

public class NoPaddingTextView extends TextView {

private int mAdditionalPadding;

public NoPaddingTextView(Context context) {
    super(context);
    init();
}


public NoPaddingTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

private void init() {
    setIncludeFontPadding(false);
}

@Override
protected void onDraw(Canvas canvas) {
    int yOff = -mAdditionalPadding / 6;
    canvas.translate(0, yOff);
    super.onDraw(canvas);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    getAdditionalPadding();

    int mode = MeasureSpec.getMode(heightMeasureSpec);
    if (mode != MeasureSpec.EXACTLY) {
        int measureHeight = measureHeight(getText().toString(), widthMeasureSpec);

        int height = measureHeight - mAdditionalPadding;
        height += getPaddingTop() + getPaddingBottom();
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
    }
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

private int measureHeight(String text, int widthMeasureSpec) {
    float textSize = getTextSize();

    TextView textView = new TextView(getContext());
    textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
    textView.setText(text);
    textView.measure(widthMeasureSpec, 0);
    return textView.getMeasuredHeight();
}

private int getAdditionalPadding() {
    float textSize = getTextSize();

    TextView textView = new TextView(getContext());
    textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
    textView.setLines(1);
    textView.measure(0, 0);
    int measuredHeight = textView.getMeasuredHeight();
    if (measuredHeight - textSize > 0) {
        mAdditionalPadding = (int) (measuredHeight - textSize);
        Log.v("NoPaddingTextView", "onMeasure: height=" + measuredHeight + " textSize=" + textSize + " mAdditionalPadding=" + mAdditionalPadding);
    }
    return mAdditionalPadding;
}

}

用XML文件中的NoPaddingTextView类名称替换TextView

<YourPackage.NoPaddingTextView
            android:id="@+id/stid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/quicksand"
            android:gravity="center_horizontal"
            android:includeFontPadding="false"
            android:maxLines="1"
            android:text="@string/st"
            android:textSize="40sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.538"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

图片

来源: Github StackOverFlow

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM