在Android中获取屏幕宽度和高度

Posted

技术标签:

【中文标题】在Android中获取屏幕宽度和高度【英文标题】:Get screen width and height in Android 【发布时间】:2011-06-12 04:51:39 【问题描述】:

如何获取屏幕宽度和高度并将此值用于:

@Override protected void onMeasure(int widthSpecId, int heightSpecId) 
    Log.e(TAG, "onMeasure" + widthSpecId);
    setMeasuredDimension(SCREEN_WIDTH, SCREEN_HEIGHT - 
        game.findViewById(R.id.flag).getHeight());

【问题讨论】:

见:***.com/questions/1016896/… 这能回答你的问题吗? How to get screen dimensions as pixels in android 更新正确答案***.com/a/67691009/4797289 【参考方案1】:
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;

这在某些情况下可能不起作用。对于getMetrics comments:

获取描述这个大小和密度的显示指标 展示。该方法返回的大小不一定 表示显示器的实际原始尺寸(原始分辨率)。

    可以调整返回的大小以排除某些始终可见的系统装饰元素。

    它可以扩展以提供与最初为较小显示器设计的旧应用程序的兼容性。

    根据显示所属的WindowManager可能会有所不同。

如果从非活动上下文请求(例如,通过 (WindowManager) 的应用程序上下文 getApplicationContext().getSystemService(Context.WINDOW_SERVICE)) metrics 将根据当前报告整个显示的大小 旋转并减去系统装饰区域。

如果从活动中请求(使用 getWindowManager() 或 (WindowManager) getSystemService(Context.WINDOW_SERVICE))导致 指标将对应于当前应用程序窗口指标。在这种情况下,大小可以小于多窗口模式下的物理大小。

所以,要获得真正的尺寸:

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;

或:

Point point = new Point();
getWindowManager().getDefaultDisplay().getRealSize(point);
int height = point.y;
int width = point.x;

【讨论】:

【参考方案2】:
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
  public static double getHeight() 
    DisplayMetrics displayMetrics = new DisplayMetrics();
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    display.getRealMetrics(displayMetrics);

    //int height = displayMetrics.heightPixels;
    //int width = displayMetrics.widthPixels;
    return displayMetrics.heightPixels;
  

使用该方法可以获得屏幕高度。 如果您想将宽度更改为displayMetrics.heightPixelsdisplayMetrics.widthPixels

它还包括所需的 api Build 版本。

【讨论】:

【参考方案3】:
       @Override
        protected void onPostExecute(Drawable result) 
            Log.d("width",""+result.getIntrinsicWidth());
            urlDrawable.setBounds(0, 0, 0+result.getIntrinsicWidth(), 600);

            // change the reference of the current drawable to the result
            // from the HTTP call
            urlDrawable.drawable = result;

            // redraw the image by invalidating the container
            URLImageParser.this.container.invalidate();

            // For ICS
            URLImageParser.this.container.setHeight((400+URLImageParser.this.container.getHeight()
                    + result.getIntrinsicHeight()));

            // Pre ICS`enter code here`
            URLImageParser.this.container.setEllipsize(null);
        

【讨论】:

请连同代码一起写一些解释。在 SO --Review 中通常不鼓励仅代码答案

以上是关于在Android中获取屏幕宽度和高度的主要内容,如果未能解决你的问题,请参考以下文章

Android中获取屏幕高度和宽度

android 获取屏幕高度和宽度 的方法

android怎么获取fragment屏幕宽度

怎样用 JavaScript 准确获取手机屏幕的宽度和高度

android 获取屏幕宽度和高度

如何将获取的屏幕宽度之后传给css