30

LinearLayoutその中に2つの垂直がTextViewあります。前者には静的なテキスト プロパティ (テキストは決して変更されません) が含まれ、後者には回帰タイマーが含まれます。以下の画像は、両方のアイテムを示しています。

積み重ねられたテキストビュー

両方のテキストの上下にある余白をなくしたい。私はいくつかのアプローチを試しました...

android:includeFontPadding="false"
android:lineSpacingMultiplier="1"
android:lineSpacingExtra="0dp"
android:paddingTop="0dp"
android:paddingBottom="0dp"
android:layout_marginTop="0dp"
android:layout_marginBottom="0dp"

...しかし、テキストの上のスペースを削除したものはありませんでした。余分なスペースを入れずに両方のテキストを互いに近づけるにはどうすればよいですか?

PS:この似たような質問を見つけましたが、誰も答えていません。


完全なレイアウト コード:

<LinearLayout 
    android:id="@+id/boxTime"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="20dp" >

    <TextView
        android:id="@+id/textRemainingTime2"
        android:layout_width="wrap_content"
        android:layout_heigh="wrap_content"
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        android:textSize="70sp"
        android:includeFontPadding="false"
        android:lineSpacingMultiplier="1"
        android:lineSpacingExtra="0dp"
        android:paddingTop="0dp"
        android:paddingBottom="0dp"
        android:layout_marginTop="0dp"
        android:layout_marginBottom="0dp"
        android:text="@string/title" />

    <TextView
        android:id="@+id/textRemainingTime"
        android:layout_width="wrap_content"
        android:layout_heigh="wrap_content"
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        android:includeFontPadding="false"
        android:lineSpacingMultiplier="1"
        android:lineSpacingExtra="0dp"
        android:paddingTop="0dp"
        android:paddingBottom="0dp"
        android:layout_marginTop="0dp"
        android:layout_marginBottom="0dp"
        android:textSize="107sp"
        android:text="@string/timer" />

</LinearLayout>
4

9 に答える 9

48

負のマージンを使用してみてください。数字を正しく理解するには少し時間がかかるかもしれませんが、私は以前にそれを行ったことがあり、うまくいきました。

android:layout_marginTop="-5dp"
于 2012-05-26T21:22:14.583 に答える
27

デフォルトでは、TextView にはアクセント文字用のスペースを残すためのパディングが含まれています。次の方法でオフにできます。

 android:includeFontPadding="false"

また

 textView.setIncludeFontPadding(false)
于 2014-10-13T18:34:39.270 に答える
18

テキストのベースラインを TextView の下部に等しくします。

public class BaselineTextView extends TextView {

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

    @Override
    protected void onDraw(Canvas canvas) {
        int yOffset = getHeight() - getBaseline();
        canvas.translate(0, yOffset);
        super.onDraw(canvas);
    }

}

注: ディセンダーを切断しないようにするには、の親( XML 内) を呼び出しsetClipChildren(false)ます。TextViewViewGroupandroid:clipChildren="false"

于 2012-11-29T13:53:34.073 に答える
3

includeFontPaddingを false に設定すると役立ちます。

android:includeFontPadding="false"

しかし、設定したためにディセンダーがないことがわかっている場合

android:textAllCaps="true"

または、ディセンダーを持つ文字がないことがわかっている場合は、カスタム TextView を作成して、高さをベースラインに設定できます。

public class ExTextView extends TextView {

    public ExTextView(Context context) {
        this(context, null);
    }

    public ExTextView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public ExTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public ExTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        setHeight(getBaseline());  // <--- Shrink size to baseline
        super.onDraw(canvas);
    }
}

ソース コードは、私の UiComponents テスト アプリに含まれています。 https://github.com/landenlabs/UiComponents

于 2016-05-20T11:48:49.487 に答える
1

負のマージンはトリックを行います

于 2012-05-26T21:24:20.777 に答える
1

以下を使用するだけで、他には何も必要ありません。

 android:includeFontPadding="false"

ラインギャップにいくつかのバリエーションが必要な場合は、次を使用します。

android:lineSpacingExtra 
于 2021-02-16T06:56:26.570 に答える