Paint.setTextSize(float)使用哪个度量单位?

mar*_*ser 14 android units-of-measurement

我想在视图上使用特定高度(以像素为单位)绘制文本Canvas.你可以简单地使用Paint.setTextSize(float)像素数或使用dpsp

Tod*_*ies 14

它使用像素,但您可以使用以下代码将其转换为dp:

double getDPFromPixels(double pixels) {
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    switch(metrics.densityDpi){
     case DisplayMetrics.DENSITY_LOW:
                pixels = pixels * 0.75;
                break;
     case DisplayMetrics.DENSITY_MEDIUM:
                 //pixels = pixels * 1;
                 break;
     case DisplayMetrics.DENSITY_HIGH:
                 pixels = pixels * 1.5;
                 break;
    }
    return pixels;
}
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一下,答案是不正确的,`dp`是`px/density`.实际上可以简单地用`pixel/= metrics.density`替换`switch`. (3认同)

The*_*eIT 8

获取此类方法的px值的最简单方法是在dimens.xml文件中定义相应的dp或sp值,并像这样检索它:

int sizeInPx = context.getResources().getDimensionPixelSize(R.dimen.sizeInSp);
Run Code Online (Sandbox Code Playgroud)

根据您的需要,您实际上有3种方法可供使用:

  • getDimension() 返回以像素为单位的float.

  • getDimensionPixelSize()返回以像素为单位的int.这与getDimension()相同,除了返回值为ROUNDED到最接近的整数值,并且它确保非零输入值导致非零输出值(例如,0.1返回为1,而不是0).

  • getDimensionPixelOffset()返回以像素为单位的int.这与getDimension()相同,除了返回值为TRUNCATED(即向下舍入).结果可能为零.