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));
我是 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
中设置 getDimension()
正在返回说100px
(取决于屏幕)setTextSize()
假设您已经设置了100sp
并将其调整为非常大的尺寸。
20sp
要修复,只需使用接受单位的 setTextSize()
的另一个选项:
text.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.About_contents));