Android:TextView:刪除頂部和底部的間距和填充


Answers

我感到你的痛苦。 我已經嘗試了上面的每個答案,包括setIncludeFontPadding為false,這對我沒有任何幫助。

我的解決方案 TextView上的layout_marginBottom="-3dp"為您提供底部解決方案BAM!

雖然,layout_marginTop上的layout_marginTop失敗....呃。

Question

當我在文本中有一個\nTextView時,在右邊我有兩個singleLine ,一個在另一個之下,兩者之間沒有間距。 我為所有三個TextView設置了以下內容。

 android:lineSpacingMultiplier="1" android:lineSpacingExtra="0pt" android:paddingTop="0pt" android:paddingBottom="0pt"

左邊的TextView的第一行與右上方的TextView完美地排列在一起。 左側TextView的第二行比右下角TextView的第二行稍高。

似乎在TextView的頂部和底部有某種隱藏的填充。 我該如何刪除它?




據我所知,這是大多數小部件固有的,而“填充”的數量在電話製造商中是不同的。 該填充實際上是圖像邊界與9補丁映像文件中的圖像之間的空白區域。

例如,在我的Droid X上,微調控件獲得了比按鈕更多的空白空間,當您將微調控件與按鈕內聯時,這使得它看起來很尷尬,但在我妻子的手機上,同樣的應用程序沒有相同的問題,看起來不錯!

我唯一的建議是創建你自己的9個補丁文件,並在你的應用程序中使用它們。

啊,這是Android的痛苦。

編輯:澄清填充與白色空間。




我認為這個問題可以通過這種方式解決:

 <TextView
        android:id="@+id/leftText"
        android:includeFontPadding="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30dp"
        android:text="Hello World!\nhello world" />

 <TextView
        android:id="@+id/rightUpperText"
        android:includeFontPadding="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/leftText"
        android:layout_alignTop="@+id/leftText"
        android:textSize="30dp"
        android:text="Hello World!" />

 <TextView
        android:id="@+id/rightLowerText"
        android:includeFontPadding="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/leftText"
        android:layout_below="@+id/rightUpperText"
        android:textSize="30dp"
        android:text="hello world" />

這些是結果:

ScreenShot-1

ScreenShot-3

儘管rightLowerText中的特殊字符行看起來比leftText的第二行稍高一點,但它們的基線仍保持對齊狀態。




簡單使用

android:padding="0dp"



由於我的要求是覆蓋現有的textView findViewById(getResources().getIdentifier("xxx", "id", "android")); ,所以我不能簡單地嘗試onDraw()的其他答案。

但我只是想出解決我的問題的正確步驟,以下是Layout Inspector的最終結果:

因為我想要的只是刪除頂部空格,所以我不必選擇其他字體來刪除底部空格。

這是修復它的關鍵代碼:

Typeface mfont = Typeface.createFromAsset(getResources().getAssets(), "fonts/myCustomFont.otf");
myTextView.setTypeface(mfont);

myTextView.setPadding(0, 0, 0, 0);

myTextView.setIncludeFontPadding(false);

第一個關鍵是設置自定義字體“fonts / myCustomFont.otf”,它的底部有空格但不在最上面,你可以通過打開otf文件輕鬆地找出它並點擊android Studio中的任何字體:

正如你所看到的,底部的光標有額外的間距,但不在頂部,所以它解決了我的問題。

第二個關鍵是你不能簡單地跳過任何代碼 ,否則它可能無法工作。 這就是你可以找到一些人評論答案正在工作而另一些人評論說它不起作用的原因。

讓我們來說明如果我刪除其中一個會發生什麼。

沒有setTypeface(mfont);

沒有setPadding(0, 0, 0, 0);

沒有setIncludeFontPadding(false);

沒有其中3個(即原始):




這也讓我很惱火,我發現的答案是字體本身有更多的空間,而不是TextView。 這是來自文檔發布背景的相當讓人惱火的一點,就是Android對印刷元素的控制有限。 我建議使用自定義字體(比如Bitstream Vera Sans,這是允許重新分發的),可能沒有這個問題。 不過,我不確定具體是否。