14

我想使用在视图上绘制具有特定高度(以像素为单位)的文本Canvas。您可以简单地使用Paint.setTextSize(float)像素数还是使用dpor sp

4

3 回答 3

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;
}
于 2012-07-30T11:02:18.200 回答
8

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

int sizeInPx = context.getResources().getDimensionPixelSize(R.dimen.sizeInSp);

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

  • getDimension()返回以像素为单位的浮点数。

  • getDimensionPixelSize()返回一个以像素为单位的整数。这与 getDimension() 相同,除了返回值被四舍五入到最接近的整数值并确保非零输入值导致非零输出值(例如,0.1 返回为 1,而不是 0)。

  • getDimensionPixelOffset()返回一个以像素为单位的整数。这与 getDimension() 相同,只是返回的值是 TRUNCATED(即向下舍入)。结果可能为零。

于 2015-03-08T01:56:31.230 回答
1

这些方法包括DisplayMetrics可以添加到未来的 Android SDK 中。

要下降的像素:

public static float getDipFromPixels(float px) {
        return TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_PX,
                px,
                Resources.getSystem().getDisplayMetrics()
        );
}

下降到像素:

public static float getPixelsFromDip(float dip) {
        return TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, 
                dip,
                Resources.getSystem().getDisplayMetrics()
        );
}
于 2015-02-23T16:52:33.587 回答