2011-12-11 186 views
25

我確實遇到了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

而另一個問題:如果我從頂部和7DP從下完美的作品我的設備上發現了保證金20dp,可我靠,這將在其他屏幕類似的行爲方式? (這些利潤是按鈕)

+0

你能後的你是什麼樣的形象看見了什麼? –

+0

是的,請發佈圖像 –

+0

字體似乎有可能有頂部間距。嘗試保持高度爲100dp,但增加textSize(102dp或105dp等)。 – Squonk

回答

43

使用android:includeFontPadding="false"幫了我很多類似的情況。

+0

謝謝!這固定了我的字體沒有正確對齊我的TextView的頂部。 – TSL

+1

謝謝,就是我在找的東西。順便說一下,這應該是默認設置。 – HGPB

+10

工作一點點,但不能完美解決我的問題。 –

2

你需要做的是另一種觀點相對付諸字體的頂部,並給它一個負android:layout_marginBottom在浸,使得其字體的頂部相匹配。如果字體有餘量,我認爲沒有更好的方法。

1

是這個空間包括默認。您無法按照我的搜索區域刪除該空間。所以你需要實現一些邏輯來獲得這樣的觀點。

見下圖:

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」是你的屬性和第二個的就像我爲你設定的那樣。

享受。 :))

+0

查看更新的答案。 –

+0

您可以通過將android:lineSpacingExtra設置爲負值來達到相同效果。但他們都有問題,TextView將剪裁像g,q,p這樣的邊界外的字符。 –

+0

有趣的黑客,我想。但是,如果我想刪除底部的額外空間,那也沒用。 – user3390963

9

我在那裏設置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); 
} 
+0

這幾乎可以工作,在一個小字體的TextView中,它完美地對齊。在74sp字體上,沒有那麼多。但爲這個好的解決方案+1。 –