如何设置Paint.setTextSize()的单位
是否有可能更改Paint.setTextSize()
的单位? 据我所知,它是像素,但我喜欢设置DIP的文本大小为多屏幕支持。
像这样转换它
// The gesture threshold expressed in dip private static final float GESTURE_THRESHOLD_DIP = 16.0f; // Convert the dips to pixels final float scale = getContext().getResources().getDisplayMetrics().density; mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale + 0.5f); // Use mGestureThreshold as a distance in pixels
从这里http://developer.android.com/guide/practices/screens_support.html#dips-pels
我知道这个话题是老的,已经回答了,但我也想build议这段代码:
int MY_DIP_VALUE = 5; //5dp int pixel= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, MY_DIP_VALUE, getResources().getDisplayMetrics());
接受的答案是针对手势,而不是设置文字大小。 最高的投票答案(在撰写本文时)是接近的,但是文档build议使用sp
而不是dp
因为除了屏幕密度的缩放(如dp
值)之外, sp
也根据用户首选的字体大小进行缩放。 @ pelotasplus的答案只有在你从资源中获得价值时才有效。
从代码中的int
int spSize = 17; float scaledSizeInPixels = spSize * getResources().getDisplayMetrics().scaledDensity; mTextPaint.setTextSize(scaledSizeInPixels);
或者,
int spSize = 17; float scaledSizeInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spSize, getResources().getDisplayMetrics()); mTextPaint.setTextSize(scaledSizeInPixels);
从资源
或者,如果您在资源中拥有sp
或dp
值:
<resources> <dimen name="fontSize">17sp</dimen> </resources>
同
float scaledSizeInPixels = getResources().getDimensionPixelSize(R.dimen.fontSize); mTextPaint.setTextSize(scaledSizeInPixels);
其他链接
- 如何互相转换DP,PX,SP,特别是DP和SP?
- Android:Canvas.drawText()文本大小不同的屏幕分辨率
-
Paint.setTextSize
-
getDimensionPixelSize
将dp-s转换为px-els,将显示指标考虑在内的方法甚至更短
如果使用Paint对象在Canvas上绘制文本,则可以让Canvas为您进行缩放。
当调用Canvas.drawText()
,文本大小首先由在Paint
对象中传递来确定,可以通过Paint.setTextSize()
来设置。 Canvas
根据canvas密度自动缩放文字大小,这可以通过Canvas.getDensity()
来find。
在Canvas上绘制的绘画对象上设置文本大小时,使用单位值dp
或sp
并让Canvas处理缩放比例。