Android의 TextView에서 상단 및 하단 공간을 제거하는 방법
레이아웃 파일에 아래 XML
를 포함 시키면 아래 이미지를 볼 수 있습니다. 보시면 상단과 하단 공간이 있음을 알 수 있습니다.TextView
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="E1"
android:background="#ff00ff00"/>
공간을 제거하고 싶습니다. 그것을 제거하는 방법? 뭐라고 해요? 누군가 단서가 있으면 .. 알려주세요. 미리 감사드립니다.
보십시오 android:includeFontPadding="false"
이 도움이 있는지. 내 경험상 약간 도움이 될 것이지만 TextView 크기를 정확한 픽셀 완벽한 텍스트 크기로 줄이는 방법은 없습니다.
더 나은 결과를 제공 할 수도 있고 제공하지 않을 수도있는 유일한 대안 은 높이 "24sp"
대신 텍스트 크기와 일치하도록 치수를 고정하는 것입니다 "wrap_content"
.
나는 같은 문제가 있었다. 속성 android:includeFontPadding="false"
이 작동하지 않습니다. 이 문제를 다음과 같이 해결했습니다.
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"
꽤 좋지만 정확하게 얻지는 못합니다. 때로는 네거티브 여백을 적용하여 직접 알아낼 수 있도록 경계선 정확도를 원합니다.
아래쪽 및 위쪽 여백을 음수 값으로 설정하십시오.
이 같은:
android:layout_marginTop="-5dp"
android:layout_marginBottom="-5dp"
그에 따라 값을 조정하십시오.
나는 같은 문제에 직면했다. 여기에 좋은 대답이 있습니다. 텍스트를 TextView 상단에 정렬하는 방법은 무엇입니까?
그러나 코드는 거의 완성되지 않았으며 모든 글꼴 크기를 지원하지는 않습니다. 라인 변경
int additionalPadding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getContext().getResources().getDisplayMetrics());
...에
int additionalPadding = getTextSize() - getLineHeight();
완전한 C # 코드 (모노)는 상단 오프셋을 제거합니다.
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 ();
}
}
이것이 우리 시대를 구한 코드입니다. maksimko의 모노 C # 코드를 사용하여 조정 되었습니다 .
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);
}
}
다른 글꼴 크기 textView.setIncludeFontPadding(false)
로 정렬했기 때문에 여전히 놀아야했습니다 TextViews
.
DynamicMind 의 답변 에 TextView 주변에 공백이 표시되는 이유는 기본적으로 사용하는 9 패치 배경에 패딩 을 추가하고 싶었습니다 .
9- 패치 기술을 사용하면 효과적으로 패딩 인 콘텐츠 영역 을 지정할 수 있습니다 . 이 패딩은 뷰의 패딩을 명시 적으로 설정하지 않는 한 사용됩니다. 예를 들어 패딩이 설정된 뷰에 9 패치 배경을 프로그래밍 방식으로 설정하면 재정의됩니다. 반대로 패딩을 설정하면 9 패치 배경에서 설정 한 내용이 무시됩니다.
Unfortunately, in the XML layout it's not possible to determine the order of these operations. I think just removing the background from your TextViews would help:
android:background="@null"
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();
}
}
Have you defined a layout margin? For example:
android:layout_marginTop="5dp"
Otherwise, if your text view is wrapped inside a LinearLayout or other container, then that cold have either padding or a margin too.
android:background="@android:drawable/editbox_background"
use it according to you change it that you want editbox_background. because android provide some build in background like above code choose according to your requirement. May be it is help full to you.
Inside a LinearLayout the default padding might be an issue. Try setting it to 0dp. It worked for me.
The answer of TopAlignedTextView code:TopAlignedTextView@GitHub
use it by layout:
<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"
/>
이 문제를 해결하는 방법은 꽤 엉망이지만 텍스트 뷰의 높이를 정적으로 설정하고 텍스트에 거의 맞지 않을 때까지 조작하여 원하는 위치에 텍스트를 배치 할 수있었습니다. 제 경우에는 제가 사용했던 글꼴 스타일의 높이가 64sp 였으므로 textview의 높이를 50sp로 설정했는데 제대로 작동했습니다. 또한 전경 _ 중력을 하단으로 설정해야했습니다.
android : includeFontPadding = "false"
'program tip' 카테고리의 다른 글
자바 스크립트에서. (0) | 2020.11.30 |
---|---|
Esc 키를 누를 때 양식을 닫는 방법은 무엇입니까? (0) | 2020.11.30 |
양식에서 _lpchecked =“1”은 무엇입니까? (0) | 2020.11.30 |
getSupportFragmentManager ()와 getChildFragmentManager ()의 차이점은 무엇입니까? (0) | 2020.11.30 |
조각에 BroadcastReceiver 등록 및 등록 해제 (0) | 2020.11.30 |