2012-03-02 125 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