我是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>
我知道有一百万种更好的方法来实现这种事情,但为什么会发生这种情况只会让我感到害怕。
答案 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));