1

次のコードを使用して、エミュレーター (API 7) で画面サイズを取得しようとしています。

float scaledDensity = this.getResources().getDisplayMetrics().scaledDensity;

今私は使用しようとしますscaledDensity

このコードで:

int width = (width / ((int) scaledDensity)) / 7;

そして、私はこの例外を受け取ります

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tomer.workoutlog2/com.example.workoutlog.SimpleCalendarViewActivity}: java.lang.ArithmeticException: divide by zero

完全なコード:

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE))
                .getDefaultDisplay();
        int width = 0;

        if (android.os.Build.VERSION.SDK_INT >= 13) {
            Point size = new Point();
            display.getSize(size);
            width = size.x;

        } else
            width = display.getWidth();

        float scaledDensity = this.getResources().getDisplayMetrics().scaledDensity;

        width = (width / ((int) scaledDensity)) / 7;

私の実際のデバイスでは、このエラーは発生しません。たぶん、エミュレータの問題でしょうか?

4

4 に答える 4

0

API 7 では、次のコードを使用できます。これは API 13 から廃止されました。

Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
于 2013-08-13T10:30:41.653 に答える
0

scaledDensity() は float を返します。誤って 1.0f 未満の浮動小数点数で整数除算を行っていませんか?

于 2013-08-13T10:31:13.377 に答える
0

このコードを試してください:

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
float scaleFactor = displaymetrics.density;
于 2013-08-13T10:31:50.187 に答える
0

これを試して...

DisplayMetrics displaymetrics = new DisplayMetrics();
            getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
            int height = displaymetrics.heightPixels;
            int width = displaymetrics.widthPixels;
于 2013-08-13T10:33:15.040 に答える