Android文字过大的文字大小

时间:2015-04-29 05:42:30

标签: android textview

我是Android的新手,我正在研究这个"关于"页面给了我一些非常奇怪的行为。它具有单击时展开的文本,然后再次单击时折叠。折叠文本的大小比扩展文本大。当我单击展开时,文本比较大的扩展文本更大,即使我再次折叠,折叠的文本也会保留巨大的文本大小。 (它改变了实际的文本内容就好了)

xml Textview

<TextView
            ...
            android:textSize="@dimen/About_filler"
            android:id="@+id/Stuff"
            android:text="@string/about_filler"
            android:clickable="true"
            android:onClick="collapseToggle"
            ...
/>

点击调用

的方法
public void collapseToggle(View view){
    TextView text = (TextView) view;
    if( ! text.getText().equals(getString(R.string.about_filler))){ //if not collapsed
        text.setText(getString(R.string.about_filler));
        text.setTextSize(getResources().getDimension(R.dimen.About_filler));
    }

    else if(text.getId() == R.id.Stuff){
        text.setText(getString(R.string.about_contents_Stuff));    
        text.setTextSize(getResources().getDimension(R.dimen.About_contents));
    }

和dimen文件夹

...
<dimen name="About_contents">20sp</dimen>
<dimen name="About_filler">40sp</dimen>

我知道有一百万种更好的方法来实现这种事情,但为什么会发生这种情况只会让我感到害怕。

1 个答案:

答案 0 :(得分:1)

默认情况下,text.setTextSize(float size)假设您以SP为单位传递大小,因此它会在内部将SP转换为PX

另一方面,getResources().getDimension()正在PX返回单位,在内部通过您设置的任何值进行转换。

那么你的案件中发生了什么

  • 您已在20sp
  • 中设置dimens.xml
  • getDimension()正在返回说100px(取决于屏幕)
  • setTextSize()假设您已设置 100sp 并将其调整为真正的HUUGE。

要修复,只需使用接受单位的setTextSize()的其他选项: text.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.About_contents));