簡體   English   中英

為什么applyDimension方法返回錯誤的值?

[英]Why applyDimension method returns wrong values?

我在自定義視圖的onMeasure方法中添加了一些代碼,以確保最小的物理尺寸,以確保用戶單擊它時不會遇到問題。 事實是,我想確保高度為8毫米,但同時在某些設備中似乎可以正常工作,但在Samsung 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中。

有人可以告訴我如何解決此問題,或者如果代碼中有錯誤,請告訴我是什么問題?

非常感謝

我已經在這里的兩台SII設備上測試了您的代碼,其中一台使用庫存rom,另一台使用Cyanogenmod(Kitkat),兩者都報告了56x93.33mm的屏幕,這是相當准確的。

如果您在自定義視圖中使用相同的applyDimension調用,則應該可以使用。

您可以嘗試不同的方法作為最終測試,使用該尺寸繪制一個簡單的View並通過代碼設置其寬度。 也許自定義視圖流會修改最終視圖的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM