以编程方式设置文本大小

问题描述 投票:0回答:3
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.result_font));

以下代码有效,但

R.dimen.result_font
被视为比实际值大得多的值。根据屏幕尺寸可能是18sp-22sp或者24sp左右……但是这里设置的尺寸至少是50sp左右。有人可以推荐一些东西吗?

android
3个回答
210
投票

您必须将其更改为

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

12
投票

要求

假设我们想从资源文件中以编程方式设置 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()));

0
投票

例如,如果您想将大小设置为 14sp,则 TextView 类内部会将 14f 转换为 14sp。如果使用下面的代码。

textView.textSize = 14f

此外,如果将“autosizeTextType”属性添加到 xml 中的 textview 意味着以编程方式更改文本大小将不起作用。因此,请尝试删除该属性并更改文本大小

© www.soinside.com 2019 - 2024. All rights reserved.