获得实际的屏幕高度(android)

时间:2016-03-03 19:12:44

标签: java android android-studio

我想获得运行我的应用的设备的实际屏幕高度。为此,我尝试以下方法:

        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是获取屏幕高度的不好方法吗?

4 个答案:

答案 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);