如何设置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); 

从资源

或者,如果您在资源中拥有spdp值:

 <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,将显示指标考虑在内的方法甚至更短

https://developer.android.com/reference/android/content/res/Resources.html#getDimensionPixelSize(int);

如果使用Paint对象在Canvas上绘制文本,则可以让Canvas为您进行缩放。

当调用Canvas.drawText() ,文本大小首先由在Paint对象中传递来确定,可以通过Paint.setTextSize()来设置。 Canvas根据canvas密度自动缩放文字大小,这可以通过Canvas.getDensity()来find。

在Canvas上绘制的绘画对象上设置文本大小时,使用单位值dpsp并让Canvas处理缩放比例。