Android 文字过度放大文字大小

Android text over-enlarging text size

我是 android 的新手,我正在处理这个 "About" 页面,它给我一些非常奇怪的行为。它的文本在单击时会展开,再次单击时会折叠。折叠的文本比展开的文本大。当我单击以展开时,文本比更大的展开文本更大,甚至当我再次折叠时,折叠的文本也保持巨大的文本大小。 (它改变了实际的文本内容就好了)

xmlTextview

<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>

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

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

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

那么你的情况是怎样的

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

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