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

尝试这个...

DisplayMetrics displaymetrics = new DisplayMetrics();
            getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
            int height = displaymetrics.heightPixels;
            int width = displaymetrics.widthPixels;
于 2013-08-13T10:33:15.040 回答
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() 返回一个浮点数。确定您不会意外地进行浮点数小于 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 回答