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

634

我该如何获取屏幕宽度和高度,并在代码中使用这个值:

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

2
请参见以下链接:https://dev59.com/hnNA5IYBdhLWcg3wUL5Y - Will Tate
2
这个回答解决了你的问题吗?如何在Android中获取屏幕尺寸作为像素 - AdamHurwitz
更新正确答案:https://dev59.com/Vm445IYBdhLWcg3wq8Pp#67691009 - Rasoul Miri
36个回答

0

我发现这个页面上 weigan 的回答是最好的,以下是如何在 Xamarin.Android 中使用它:

public int GetScreenWidth()
{
    return Resources.System.DisplayMetrics.WidthPixels;
}

public int GetScreenHeight()
{
    return Resources.System.DisplayMetrics.HeightPixels;
}

0

屏幕分辨率是屏幕上的总像素数。以下程序将提取设备的屏幕分辨率,并打印屏幕的宽度和高度,这些值以像素为单位。

public static Point getScreenResolution(Context context) {
// get window managers
WindowManager manager =  (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
Point point = new Point();
display.getSize(point);

 // get width and height
 int width = point.x;
 int height = point.y;

 return point;

}


0
@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.heightPixels更改为displayMetrics.widthPixels

同时也包括所需的 API 构建版本。


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

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

获取描述显示器大小和密度的显示指标。此方法返回的大小不一定代表显示器的实际原始大小(本机分辨率)。

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

  2. 它可能会进行缩放,以与最初设计用于较小显示器的旧应用程序兼容。

  3. 它可能因所属的WindowManager而异。

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

  • 如果从活动中请求(使用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;

0
    int getScreenSize() {
        int screenSize = getResources().getConfiguration().screenLayout &
                Configuration.SCREENLAYOUT_SIZE_MASK;
//        String toastMsg = "Screen size is neither large, normal or small";
        Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
        int orientation = display.getRotation();

        int i = 0;
        switch (screenSize) {

            case Configuration.SCREENLAYOUT_SIZE_NORMAL:
                i = 1;
//                toastMsg = "Normal screen";
                break;
            case Configuration.SCREENLAYOUT_SIZE_SMALL:
                i = 1;
//                toastMsg = "Normal screen";
                break;
            case Configuration.SCREENLAYOUT_SIZE_LARGE:
//                toastMsg = "Large screen";
                if (orientation == Surface.ROTATION_90
                        || orientation == Surface.ROTATION_270) {
                    // TODO: add logic for landscape mode here
                    i = 2;
                } else {
                    i = 1;
                }


                break;
            case Configuration.SCREENLAYOUT_SIZE_XLARGE:
                if (orientation == Surface.ROTATION_90
                        || orientation == Surface.ROTATION_270) {
                    // TODO: add logic for landscape mode here
                    i = 4;
                } else {
                    i = 3;
                }

                break;


        }
//        customeToast(toastMsg);
        return i;
    }

-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。 - Ram Ghadiyaram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接