【问题标题】:Get screen width and height in Android在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());
}

【问题讨论】:

标签: android


【解决方案1】:
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;

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

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

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

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

  3. 根据显示所属的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 中通常不鼓励仅代码答案
      猜你喜欢
      • 1970-01-01
      • 2021-02-07
      • 2010-11-25
      • 2011-09-25
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 2012-11-01
      相关资源
      最近更新 更多