为什么applyDimension方法返回错误的值?

时间:2012-05-02 10:42:33

标签: android samsung-mobile

我在自定义视图的onMeasure方法中添加了一些代码,以确保最小的物理尺寸,以确保用户不会在点击它时遇到问题。事实上,我想确保8毫米的高度,但同时在一些设备似乎工作正常,它不适用于三星Galaxy S II。对于预期的8mm我在屏幕上绘制的小于5mm的东西,这是更小的,并且视图无法正确点击。为了确保问题出现在设备中,我创建了一个小程序来测试它,主要活动的代码如下:

public class TrialMillimetersActivity extends Activity {

    private static final float FINGER_WIDTH = 8.0f;
    private static final int FINGER_WIDTH_UNITS = TypedValue.COMPLEX_UNIT_MM;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);

        TextView tv = new TextView(this);
        tv.setText("DisplayMetrics:" +
            "\n  Screen resolution in pixels: " +
            metrics.widthPixels + "x" + metrics.heightPixels +
            "\n  Screen density (dpi): " + metrics.densityDpi +
            "\n  Scale for text: " + metrics.scaledDensity);

        final float minFingerWidth = TypedValue.applyDimension(
            FINGER_WIDTH_UNITS, FINGER_WIDTH, metrics);
        tv.append("\n\nThe platform returns for " + FINGER_WIDTH +
            "mm the number of " + minFingerWidth + " pixels on this device.");

        final float widthMm = FINGER_WIDTH * (metrics.widthPixels) / minFingerWidth;
        final float heightMm = FINGER_WIDTH * (metrics.heightPixels) / minFingerWidth;
        tv.append("\n\nThis means this screen has a resolution of " + widthMm + "x" +
            heightMm + " in millimeters.");

        setContentView(tv);
    }
}

我在不同的设备上尝试了上面的代码,即使不精确,也非常接近屏幕尺寸(用尺子测量)。但不是在Galaxy S II中。

有人可以告诉我如何解决这个问题,或者如果代码出错,请告诉我这是什么问题?

非常感谢

0 个答案:

没有答案