我正在尝试使用以下代码在我的模拟器(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;
在我的真实设备上,我没有收到此错误。 也许,模拟器的问题是什么?
答案 0 :(得分:0)
对于API 7,您可以使用以下代码,它已从API 13弃用
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
答案 1 :(得分:0)
scaledDensity()返回一个浮点数。当然你不小心做一个浮点小于1.0f的整数除法?
答案 2 :(得分:0)
试试这段代码:
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
float scaleFactor = displaymetrics.density;
答案 3 :(得分:0)
试试这个......
DisplayMetrics displaymetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;