[android] 안드로이드 : TextView : 상단과 하단의 간격과 패딩 제거

텍스트에 TextViewa 가 있으면 \n오른쪽 singleLine TextView에 사이에 간격이없는 두 개의 s가 있습니다. 세 가지 모두에 대해 다음을 설정했습니다 TextView.

android:lineSpacingMultiplier="1"
android:lineSpacingExtra="0pt"
android:paddingTop="0pt"
android:paddingBottom="0pt"

왼쪽의 첫 번째 줄은 TextView오른쪽 위와 완벽하게 정렬 TextView됩니다.

왼쪽 TextView의 두 번째 줄은 오른쪽 아래의 두 번째 줄보다 약간 높습니다 TextView.

TextViews 의 상단과 하단에 숨겨진 패딩이있는 것 같습니다 . 어떻게 제거 할 수 있습니까?



답변

setIncludeFontPadding (boolean includepad)

또는 XML이것은 :

android:includeFontPadding="false"

TextView정상 상승 및 하강을 초과하는 악센트를위한 공간을 만들기 위해 추가 상단 및 하단 패딩 포함 여부를 설정합니다 . 기본값은 true입니다.


답변

나도 네 아픔을 느낀다. 위의 모든 대답을 시도했지만 setIncludeFontPaddingto ~ false를 포함하여 아무것도하지 않았습니다.

내 솔루션? layout_marginBottom="-3dp"TextView바닥에 대한 솔루션을 제공합니다, BAM!

-3dp on에 layout_marginTop실패 하지만 …. ugh.


답변

나는 적절한 답변을 많이 찾았지만에서 모든 패딩을 정확하게 제거 할 수있는 답변을 찾을 수있는 곳은 TextView없었지만 공식 문서를 거친 후에 는 한 줄짜리 텍스트에 대한 해결책을 얻었습니다.

android:includeFontPadding="false"
android:lineSpacingExtra="0dp"

이 두 줄을 TextViewxml에 추가 하면 효과가 있습니다.
첫 번째 특성은 악센트에 예약 된 패딩을 제거하고 두 번째 특성은 두 줄의 텍스트 사이에 적절한 공간을 유지하기 위해 예약 된 간격을 제거합니다.

여러 lineSpacingExtra="0dp"줄로 된 TextView 를 추가하지 마십시오.


답변

를 사용하는 경우 AppCompatTextView(또는 그 API 28이후부터) 두 속성의 조합을 사용하여 첫 번째 줄의 간격을 제거 할 수 있습니다.

XML

android:firstBaselineToTopHeight="0dp"
android:includeFontPadding="false"

코 틀린

text.firstBaselineToTopHeight = 0
text.includeFontPadding = false


답변

이것은 나에게도 화가 났으며, 내가 찾은 대답은 실제로 TextView가 아닌 ​​글꼴 자체에 추가 공간이 있다는 것입니다. 문서 출판 배경에서 볼 때 안드로이드를 통해 타이포그래피 요소에 대해 제한적인 제어를하는 것은 다소 짜증납니다. 이 문제가 없을 수있는 사용자 지정 서체 (예 : 재배포가 허가 된 Bitstream Vera Sans)를 사용하는 것이 좋습니다. 그래도 구체적으로 확실하지 않습니다.


답변

이 속성 (ConstraintLayout)을 사용하려고 시도 할 수 있습니다.layout_constraintBaseline_toBaselineOf

이처럼 :

app : layout_constraintBaseline_toBaselineOf = “@ + id / textView”

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


답변

사용자 정의보기에서 간격을 제거합니다-NoPaddingTextView.

https://github.com/SenhLinsh/NoPaddingTextView

여기에 이미지 설명을 입력하십시오

package com.linsh.nopaddingtextview;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.widget.TextView;

/**
 * Created by Senh Linsh on 17/3/27.
 */

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