textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.result_font));
以下代码有效,但
R.dimen.result_font
被视为比实际值大得多的值。根据屏幕尺寸可能是18sp-22sp或者24sp左右……但是这里设置的尺寸至少是50sp左右。有人可以推荐一些东西吗?
您必须将其更改为
TypedValue.COMPLEX_UNIT_PX
,因为getDimension(id)
从资源返回一个dimen值并隐式转换为px。
Java:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.result_font));
科特林:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
resources.getDimension(R.dimen.result_font))
要求
假设我们想从资源文件中以编程方式设置 textView 大小。
维度资源文件(res/values/dimens.xml)
<resources>
<dimen name="result_font">16sp</dimen>
</resources>
解决方案
首先从资源文件中获取dimen值到变量“textSizeInSp”中。
int textSizeInSp = (int) getResources().getDimension(R.dimen.result_font);
接下来将 16 sp 值转换为相等的像素。
为此创建一个方法。
public static float convertSpToPixels(float sp, Context context) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
}
让我们设置TextSize,
textView.setTextSize(convertSpToPixels(textSizeInSp , getApplicationContext()));
大家一起
int textSizeInSp = (int) getResources().getDimension(R.dimen.result_font);
textView.setTextSize(convertSpToPixels(textSizeInSp , getApplicationContext()));
例如,如果您想将大小设置为 14sp,则 TextView 类内部会将 14f 转换为 14sp。如果使用下面的代码。
textView.textSize = 14f
此外,如果将“autosizeTextType”属性添加到 xml 中的 textview 意味着以编程方式更改文本大小将不起作用。因此,请尝试删除该属性并更改文本大小