web-dev-qa-db-ja.com

TextViewの上部マージンを削除する方法は?

TextViewに問題があります。その上にマージン/パディングを入れたくありません。

<TextView Android:layout_width="wrap_content"
          Android:layout_height="wrap_content"
          Android:id="@+id/ptp_hour"
          Android:textColor="@color/black"
          Android:textSize="100dp"
          Android:height="100dp"
          Android:layout_marginTop="0dp"
          Android:paddingTop="0dp"
          Android:includeFontPadding="false"
          Android:maxLines="1"
          Android:text="10"/>

私のTextViewはこのように見え、textSizeheightが同じ値に設定されているにもかかわらず、フォントの上にスペースがあります。フォントの上部に対して別のビューを配置したいので、気になります。この間隔はフォント自体に含まれていますか?

TextView in RelativeLayout

そして別の質問:上から20dp、下から7dpのマージンが私のデバイスで完全に機能することがわかった場合、他の画面でも同じように動作することを信頼できますか? (これらのマージンはボタン用です)

26
Michal Chudy

Android:includeFontPadding="false"を使用すると、同様の状況で大いに役立ちました。

43
Maurycy

Android:includeFontPadding=falseの設定が役に立たないという同じ問題がありました。妥当な時間内に見つけた最善の解決策は、TextViewのonDrawメソッドをオーバーライドし、フォントメトリックのトップ値とアセント値の違いに合わせてキャンバスを調整することでした。

FontMetricsInt fontMetricsInt;
@Override
protected void onDraw(Canvas canvas) {
    if (adjustTopForAscent){
        if (fontMetricsInt == null){
            fontMetricsInt = new FontMetricsInt();
            getPaint().getFontMetricsInt(fontMetricsInt);
        }
        canvas.translate(0, fontMetricsInt.top - fontMetricsInt.ascent);
    }
    super.onDraw(canvas);
}
9
Thorstenvv

あなたがする必要があるのは、フォントの上部を基準にして他のビューを配置し、フォントの上部と一致するように、ディップに負のAndroid:layout_marginBottomを与えることです。フォントにマージンがある場合、それを行うより良い方法はないと思います。

2
Daniel

はい、このスペースはデフォルトで含まれています。私の検索エリアでは、そのスペースを削除することができません。したがって、そのようなビューを得るには、いくつかのロジックを実装する必要があります。

以下の画像を参照してください:

enter image description here

それは良い考えではありませんが、以下のコードのように行うことができます:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_height="wrap_content" Android:layout_width="wrap_content"
    Android:background="#ffffff">
    <TextView Android:layout_width="wrap_content"           
        Android:layout_height="wrap_content"           
        Android:id="@+id/ptp_hour"           
        Android:textColor="@Android:color/black"           
        Android:textSize="100sp"
        Android:lineSpacingMultiplier="0.8"
        Android:scrollY="-100dp"
        Android:scrollX="100dp"
        Android:text="10"/>
    <TextView 
        Android:text="10"
        Android:layout_height="wrap_content"
        Android:layout_width="wrap_content"
        Android:textColor="#00FFFFFF"
        Android:shadowColor="#000000"
        Android:shadowDy="-50"
        Android:shadowRadius="1"
        Android:textSize="100dp"/>

</LinearLayout>

ここで、最初の「10」はあなたのプロパティであり、2番目は私があなたのために設定したとおりです。

楽しい。 :))

1