【问题标题】:Getting the actual screen height (android)获取实际屏幕高度(android)
【发布时间】:2016-03-03 19:12:43
【问题描述】:

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

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

【问题讨论】:

    标签: java android android-studio


    【解决方案1】:

    this回答

    如果您的 API 级别 > 13,如果您处于活动状态,请尝试此操作

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int width = size.x;
    int height = size.y;
    

    如果您不在 Activity 中,您可以通过 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 显示尺寸)。

    【讨论】:

      【解决方案2】:
      int width=Resources.getSystem().getDisplayMetrics().widthPixels;
      int height=Resources.getSystem().getDisplayMetrics().heightPixels;
      

      【讨论】:

        【解决方案3】:

        我需要获得实际可用高度,在所有选项中,这是唯一对我有用的东西。

        创建一个矩形,并获取它的尺寸:

        Rect r = new Rect();
        activityRootView.getWindowVisibleDisplayFrame(r);
        int screenHeight = r.bottom - r.top;
        

        activityRootView 是布局的根视图。

        如果需要提取工具栏高度:

        int availableScreenHeight = screenHeight - toolbar.getHeight();
        

        toolbar 是您的工具栏视图。

        availableScreenHeight 现在将没有状态栏、工具栏和导航栏(如果设备正在使用它)。

        【讨论】:

          【解决方案4】:

          你可以试试这个:

           WindowManager wm = getWindowManager();
           Display d = wm.getDefaultDisplay();
           Point size = new Point();
           d.getSize(size);
           Log.i("LOG", "W=" + size.x + " , H=" + size.y);
          

          【讨论】:

            【解决方案5】:

            您可以使用此代码:

            val display = windowManager.defaultDisplay
            val size = Point()
            display.getSize(size)
            val width: Int = size.x
            val height: Int = size.y
            

            【讨论】:

            • 这就像公认的答案,为什么要发布副本?
            猜你喜欢
            • 1970-01-01
            • 2012-11-07
            • 2011-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-14
            • 1970-01-01
            相关资源
            最近更新 更多