我为Nexus 7构建了一个简单的应用程序。我使用以下代码以DP单位获取屏幕大小。
this.getResources().getConfiguration().screenWidthDp;
this.getResources().getConfiguration().screenHeightDp;
其中“this”是MainActivity上下文对象。
我得到这些值:宽度为600 dp,高度为888 dp。
像素密度为{{1}},为213,dp与像素的比率为1.33
我使用了这个公式
tvdpi
给了我身高
pixels = dips * (density / 160)
我知道Nexus 7屏幕的像素大小为800 x 1280.此计算中缺少100个像素的高度在哪里?或者我做错了什么?
答案 0 :(得分:3)
Configuration.screenHeightDp()会返回屏幕可用区域的尺寸。
您的计算值1182接近Nexus 7的高度({3}}(1173),换句话说就是您的应用可以使用的分辨率。
全屏应用应该能够使用完整的1280分辨率。
答案 1 :(得分:2)
以下内容应该为您提供实际的显示尺寸:
private Point getDisplaySize(Context context) {
if (Build.VERSION.SDK_INT >= 17) {
return getDisplaySizeMinSdk17(context);
} else if (Build.VERSION.SDK_INT >= 13) {
return getDisplaySizeMinSdk13(context);
} else {
return getDisplaySizeMinSdk1(context);
}
}
@TargetApi(17)
private Point getDisplaySizeMinSdk17(Context context) {
final WindowManager windowManager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
final Display display = windowManager.getDefaultDisplay();
final DisplayMetrics metrics = new DisplayMetrics();
display.getRealMetrics(metrics);
final Point size = new Point();
size.x = metrics.widthPixels;
size.y = metrics.heightPixels;
return size;
}
@TargetApi(13)
private Point getDisplaySizeMinSdk13(Context context) {
final WindowManager windowManager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
final Display display = windowManager.getDefaultDisplay();
final Point size = new Point();
display.getSize(size);
return size;
}
@SuppressWarnings("deprecation")
private Point getDisplaySizeMinSdk1(Context context) {
final WindowManager windowManager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
final Display display = windowManager.getDefaultDisplay();
final Point size = new Point();
size.x = display.getWidth();
size.y = display.getHeight();
return size;
}