如何减少Android 4.0中的TextView文字大小?

问题描述:

(编辑:问题修复,见下面的答案)如何减少Android 4.0中的TextView文字大小?

我被这个问题困住了,它阻止了一个发布,所以每一个帮助将不胜感激。

下面是一个简单的程序,演示了这个问题。我用最新的SDK(R19)构建它。它在姜饼上效果很好,但在ICS上失败。当文本大小增加(10 - > 30 - > 50)时,文本字段高度会按预期增长,但当文本大小减小(50 - > 10)时,文本字段具有完整高度,就好像文本大小是50.

有人可以重现吗?任何解决方案的建议,以减少文字大小正常工作?

主要活动: package test.resize;

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 

public class ResizeTestActivity extends Activity { 
    private int mNextTextSize = 10; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final TextView textView = (TextView) findViewById(R.id.text0); 

     findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // Cycle to next text size in {10, 30, 50} 
       textView.setText("Text Size " + mNextTextSize); 
       textView.append("\uFEFF"); // <--- THE FIX (see answer below) 
       textView.setTextSize(mNextTextSize); 
       // textView.requestLayout(); // does not help 
       // textView.invalidate();  // does not help 
       mNextTextSize = (mNextTextSize >= 50) ? 10 : (mNextTextSize + 20); 
      } 
     }); 
    } 
} 

主要布局:

<?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="wrap_content" 
    android:orientation="vertical" > 
    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Click To Cycle Text Size" /> 

    <TextView android:id="@+id/text0" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="100dip" 
     android:background="#ffffff00" 
     android:text=""/>  
</LinearLayout> 

清单:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="test.resize" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-sdk android:minSdkVersion="8" /> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".ResizeTestActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

The text field at original text size 10

The text field at text size 10 after cycling through size 50

回答我自己的问题。这是一个报告错误。

http://code.google.com/p/android/issues/detail?id=22493

添加

tv.append("\uFEFF"); // zero width space 

设置TextView的文本后解决了这个问题。

注意:如果您使用自定义字体,请确保它包含\ uFEFF字符。如果没有,您可能还会遇到单行省略号的问题。

添加textView.requestLayout()或设置新的文字大小后,设置为textView.invalidate()。我相当肯定其中的一个应该做到这一点。

+0

谢谢kcoppock。只是再次尝试(每一个都),但没有帮助。更新了问题以反映它。 – user1139880