2012-03-02 117 views
15

當我按一下按鈕,字體大小縮小到12 然而,結果是:安卓:TextView的高度不縮小字體大小後更改

enter image description here

的main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/test" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="40sp" 
     android:background="#80ff0000" 
     android:text="@string/hello" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

</LinearLayout> 

的java:

public class FontSizeTestActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     final TextView text = (TextView) findViewById(R.id.test); 




     Button button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 

       text.setTextSize(12); 
      } 
     }); 
    } 
} 

如何至尊nk textView的高度,以便它只包裹實際的字體?

+0

我只是測試你的代碼和它的作品,因爲它應該。你使用的是哪個版本的Android? – caiocpricci2 2012-03-03 07:16:00

+0

我在Android 3.2&4.0上進行了測試 – jclova 2012-03-05 15:45:18

+0

這些解決方案都不適用於任何Android版本。 T__________T – Magicode 2014-07-08 22:08:04

回答

5

最後,我找到了原因/解決方案!

這是Android 3.1+一個已知的錯誤

Issue 17343

Issue 22493

可能的解決方法是:

text.setText(text+"\n"); 

final String DOUBLE_BYTE_SPACE = "\u3000"; 
text.setText(text + DOUBLE_BYTE_SPACE); 
+1

很好的發現問題。使用提到的\ u3000或\ u2060會在字符串的末尾產生一個空格或「盒子」字符,這取決於設備字體,所以只是附加一些東西是不可靠的。 – Moritz 2012-09-06 13:11:05

+0

Moritz的回答更加正確:添加「\ u200b」(它不會爲某些設備創建一個破損的盒子) – jclova 2014-08-21 18:13:40

0

也許將視圖設置爲View.GONE,更改文本大小,然後設置爲View.VISIBLE將工作?

+0

不,還是一樣:( – jclova 2012-03-05 15:44:00

0

在main.xml文件中給出的TextView大小爲android:textSize =「40sp」。並在java端,單擊按鈕,在這裏更改值

public void onClick(View v) { 

      text.setTextSize(12); 
     } 
1

嘗試調用invalidate()或invalidate()的變體。 從Android開發者文檔:

公共無效無效()

自:API等級1 無效整個視圖。如果視圖可見,onDraw(android.graphics.Canvas)將在未來的某個時間點被調用。這必須從UI線程調用。要從非UI線程調用,請調用postInvalidate()。

http://developer.android.com/reference/android/view/View.html#invalidate()

+0

這是我嘗試的第一件事,沒有運氣。 – jclova 2012-03-06 17:30:28

5

代替使用:

final String DOUBLE_BYTE_SPACE = "\u3000"; 
text.setText(text + DOUBLE_BYTE_SPACE); 

更好地利用:

final String DOUBLE_BYTE_WORDJOINER = "\u2060"; 
text.setText(text + DOUBLE_BYTE_WORDJOINER); 

的額外信息:字Joiner是0寬度的空間。

+1

這對我來說非常合適,同時添加了「\ n 「did not do it。 – tmanthey 2012-10-22 21:09:55

+0

謝謝,爲什麼我之前沒有看到這個?有沒有在android文檔中有關於此的任何說明? – deadfish 2012-12-25 03:13:57

+0

這不是真的工作原因2問題如果你正確對齊或居中文本,你會看到「0寬度」在大多數設備上都是神話。在Android 2.3.3的三星Galaxy S2上,它甚至出現了可見的矩形。 – tmanthey 2013-06-02 12:44:10

22

於是,經過長時間的搜尋後,我找到了解決辦法。 設置文本每一次做:

setText("I am a Text",TextView.BufferType.SPANNABLE); 

或調整你的文字後只是做:

setText(getText(),TextView.BufferType.SPANNABLE); 
+0

完美,這是正確的解決方案。真的很簡單 – Corbella 2013-08-26 15:57:06

+0

不錯,接受的答案 – Farhan 2014-02-07 11:53:57

+0

很簡單,很愚蠢。已經花了很多時間(太多我認爲),但你已經節省了更多... – kpower 2016-07-21 21:09:33