我想获得运行我的应用的设备的实际屏幕高度。为此,我尝试以下方法:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int Height = metrics.heightPixels;
TextView HeightView = (TextView) findViewById(R.id.screenHeight);
HeightView.setText("Screen Height: " + Height);
int Width = metrics.widthPixels;
TextView WidthView = (TextView) findViewById(R.id.screenWidth);
WidthView.setText("Screen Width: " + Width);
我使用模拟器运行的设备的屏幕宽度为1080像素,屏幕高度为1920像素。宽度显示正确(1080像素),但高度根据应用程序仅1776像素。我需要什么才能让我的应用显示正确的屏幕高度? metrics.heightPixels
是获取屏幕高度的不好方法吗?
答案 0 :(得分:26)
请参阅this回答
如果您的API级别> 13如果您正在参加活动,请尝试此操作
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
如果您不在活动中,可以通过WINDOW_SERVICE获取默认显示:
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
getWidth和getHeight适用于API级别13或更低
<强>更新强>
对于API 17及更高版本的方法Display.getRealSize()
返回完整尺寸的屏幕,如上所述in documentation:
获取显示的实际大小 不减去任何窗口装饰或应用任何兼容性 比例因子。
根据显示器的当前旋转调整尺寸。
实际尺寸可能小于屏幕的物理尺寸 窗口管理器正在模拟一个较小的显示器(使用adb shell am 显示尺寸)。
答案 1 :(得分:8)
int width=Resources.getSystem().getDisplayMetrics().widthPixels;
int height=Resources.getSystem().getDisplayMetrics().heightPixels;
答案 2 :(得分:3)
我需要获得实际可用高度,而在所有选项中,这是唯一对我有用的东西。
创建一个矩形,并获取其尺寸:
Rect r = new Rect();
activityRootView.getWindowVisibleDisplayFrame(r);
int screenHeight = r.bottom - r.top;
其中activityRootView
是布局的根视图。
如果需要提取工具栏高度:
int availableScreenHeight = screenHeight - toolbar.getHeight();
其中toolbar
是您的工具栏视图。
availableScreenHeight
现在没有状态栏,没有工具栏,也没有导航栏(如果设备正在使用它)。
答案 3 :(得分:0)
您可以尝试以下方法:
WindowManager wm = getWindowManager();
Display d = wm.getDefaultDisplay();
Point size = new Point();
d.getSize(size);
Log.i("LOG", "W=" + size.x + " , H=" + size.y);