1

カスタム ビューの onMeasure メソッドにいくつかのコードを追加して、ユーザーが問題なくクリックできるように最小の物理的寸法を確保しました。実のところ、高さを 8 mm 確保したかったのですが、一部のデバイスでは正常に動作しているように見えますが、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 にはありません。

誰かがこの問題を回避する方法を教えてもらえますか、またはコードにエラーがある場合は何が問題なのか教えてもらえますか?

どうもありがとう

4

1 に答える 1