텍스트에 TextView
a 가 있으면 \n
오른쪽 singleLine
TextView
에 사이에 간격이없는 두 개의 s가 있습니다. 세 가지 모두에 대해 다음을 설정했습니다 TextView
.
android:lineSpacingMultiplier="1"
android:lineSpacingExtra="0pt"
android:paddingTop="0pt"
android:paddingBottom="0pt"
왼쪽의 첫 번째 줄은 TextView
오른쪽 위와 완벽하게 정렬 TextView
됩니다.
왼쪽 TextView
의 두 번째 줄은 오른쪽 아래의 두 번째 줄보다 약간 높습니다 TextView
.
TextView
s 의 상단과 하단에 숨겨진 패딩이있는 것 같습니다 . 어떻게 제거 할 수 있습니까?
답변
setIncludeFontPadding (boolean includepad)
또는 XML
이것은 :
android:includeFontPadding="false"
TextView
정상 상승 및 하강을 초과하는 악센트를위한 공간을 만들기 위해 추가 상단 및 하단 패딩 포함 여부를 설정합니다 . 기본값은 true입니다.
답변
나도 네 아픔을 느낀다. 위의 모든 대답을 시도했지만 setIncludeFontPadding
to ~ false를 포함하여 아무것도하지 않았습니다.
내 솔루션? layout_marginBottom="-3dp"
에 TextView
바닥에 대한 솔루션을 제공합니다, BAM!
-3dp on에 layout_marginTop
실패 하지만 …. ugh.
답변
나는 적절한 답변을 많이 찾았지만에서 모든 패딩을 정확하게 제거 할 수있는 답변을 찾을 수있는 곳은 TextView
없었지만 공식 문서를 거친 후에 는 한 줄짜리 텍스트에 대한 해결책을 얻었습니다.
android:includeFontPadding="false"
android:lineSpacingExtra="0dp"
이 두 줄을 TextView
xml에 추가 하면 효과가 있습니다.
첫 번째 특성은 악센트에 예약 된 패딩을 제거하고 두 번째 특성은 두 줄의 텍스트 사이에 적절한 공간을 유지하기 위해 예약 된 간격을 제거합니다.
여러
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;
}
}