如果我指定一个整数值来使用java代码更改TextView的某个文本大小,则该值将被解释为pixel(px)。现在有谁知道如何在sp?
中分配它答案 0 :(得分:490)
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
示例:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
答案 1 :(得分:35)
您可以使用DisplayMetrics
对象来帮助使用scaledDensity
attribute在像素和缩放像素之间进行转换。
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
答案 2 :(得分:30)
更清洁,更可重用的方法
在dimens.xml
目录中的res/values/
文件中定义文本大小:
</resources>
<dimen name="text_medium">14sp</dimen>
</resources>
然后将其应用于TextView
:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
答案 3 :(得分:19)
基于setTextSize
的源代码:
public void setTextSize(int unit, float size) {
Context c = getContext();
Resources r;
if (c == null)
r = Resources.getSystem();
else
r = c.getResources();
setRawTextSize(TypedValue.applyDimension(
unit, size, r.getDisplayMetrics()));
}
我构建了这个函数来计算任何对像素的偏差:
int getPixels(int unit, float size) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
return (int)TypedValue.applyDimension(unit, size, metrics);
}
单位类似于TypedValue.COMPLEX_UNIT_SP
。
答案 4 :(得分:12)
默认情况下为setTextSize,没有单位在SP中工作(缩放像素)
public void setTextSize (float size)
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This
size is adjusted based on the current density and user font size preference.
答案 5 :(得分:10)
谢谢@John Leehey和@PeterH:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
如果你在dimen.xml中将R.dimen.desired_sp定义为25
答案 6 :(得分:9)
当接受的答案不起作用时(例如处理Paint时),您可以使用:
float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);
答案 7 :(得分:7)
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
答案 8 :(得分:2)
这是将 PX 转换为 SP 格式的代码。 100%工作
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);
答案 9 :(得分:0)
尝试了所有解决方案后,没有一个给出令人满意的结果(可能是因为我正在使用具有默认超大字体的设备),以下对我有用(COMPLEX_UNIT_DIP =设备独立像素):
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
答案 10 :(得分:0)
从Api级别1开始,您可以使用public void setTextSize (float size)
方法。
从文档中:
将默认文本大小设置为给定值,解释为“缩放” 像素”单位。此尺寸是根据电流密度和 用户字体大小首选项。
参数: size-> float:缩放的像素大小。
所以您可以简单地做:
textView.setTextSize(12); // your size in sp
答案 11 :(得分:-1)
如果有人正在寻找Kotlin方式,你可以做
view.textSize = 12f