2011-01-20 211 views
261

我怎样才能得到屏幕宽度和高度用于获取屏幕宽度和高度

@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

见:http://stackoverflow.com/questions/1016896/android-how-to-get-screen-dimensions – 2011-01-20 03:18:01

回答

621

这个值使用此代码,你可以得到运行Display's Width & Height

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

在一个视图中,需要做这样的事情:

((Activity) getContext()).getWindowManager() 
         .getDefaultDisplay() 
         .getMetrics(displayMetrics); 
+11

是如果设备旋转,宽度和高度会互换? – Madeyedexter 2016-11-28 06:51:53

+6

@Madeyedexter是的。 – 2016-11-28 07:08:34

+0

这不适用于约束布局,由于某种原因,它崩溃onMeasure没有消息 – 2017-12-05 08:51:07

43

只是为了更新由parag和SPK的答案,目前的SDK的向后兼容性,从不赞成的方法一致:

int Measuredwidth = 0; 
int Measuredheight = 0; 
Point size = new Point(); 
WindowManager w = getWindowManager(); 

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    w.getDefaultDisplay().getSize(size); 
    Measuredwidth = size.x; 
    Measuredheight = size.y; 
}else{ 
    Display d = w.getDefaultDisplay(); 
    Measuredwidth = d.getWidth(); 
    Measuredheight = d.getHeight(); 
} 
+6

@digiphd不会Parang的代码在所有API版本上工作吗?所有方法都是在API级别8之前引入的,并且我没有在android dev站点上发现它们已弃用。 – Sufian 2013-05-22 12:52:46

7

试试下面的代码: -

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

2 。

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); // deprecated 
int height = display.getHeight(); // deprecated 

int width = getWindowManager().getDefaultDisplay().getWidth(); 
int height = getWindowManager().getDefaultDisplay().getHeight(); 

3.

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 

metrics.heightPixels; 
metrics.widthPixels; 
5
DisplayMetrics dimension = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(dimension); 
     int width = dimension.widthPixels; 
     int height = dimension.heightPixels; 
17

为什么不

DisplayMetrics displaymetrics = getResources()getDisplayMetrics();

然后用

displayMetrics.widthPixels(heightPixels)这里显示已被弃用/过时的

3

方法,但是这仍然是working.Require API 13

检查出来

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

获取屏幕宽度和高度的值。

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

有一个很简单的答案,没有通方面

public static int getScreenWidth() { 
    return Resources.getSystem().getDisplayMetrics().widthPixels; 
} 

public static int getScreenHeight() { 
    return Resources.getSystem().getDisplayMetrics().heightPixels; 
} 

注意:如果要高度包括导航栏,下面

WindowManager windowManager = 
     (WindowManager) BaseApplication.getApplication().getSystemService(Context.WINDOW_SERVICE); 
    final Display display = windowManager.getDefaultDisplay(); 
    Point outPoint = new Point(); 
    if (Build.VERSION.SDK_INT >= 19) { 
     // include navigation bar 
     display.getRealSize(outPoint); 
    } else { 
     // exclude navigation bar 
     display.getSize(outPoint); 
    } 
    if (outPoint.y > outPoint.x) { 
     mRealSizeHeight = outPoint.y; 
     mRealSizeWidth = outPoint.x; 
    } else { 
     mRealSizeHeight = outPoint.x; 
     mRealSizeWidth = outPoint.y; 
    } 
3
DisplayMetrics lDisplayMetrics = getResources().getDisplayMetrics(); 
int widthPixels = lDisplayMetrics.widthPixels; 
int heightPixels = lDisplayMetrics.heightPixels; 
3
Display display = ((WindowManager) this.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int mWidthScreen = display.getWidth(); 
int mHeightScreen = display.getHeight(); 
使用方法
1

Just use t他功能下面,返回屏幕尺寸的高度和宽度为整数

private int[] getScreenSIze(){ 
     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
     int h = displaymetrics.heightPixels; 
     int w = displaymetrics.widthPixels; 

     int[] size={w,h}; 
     return size; 

    } 

在您的onCreate功能或按钮的阵列单击下面的代码添加到输出的屏幕尺寸如下所示

int[] screenSize= getScreenSIze(); 
     int width=screenSize[0]; 
     int height=screenSize[1]; 
     screenSizes.setText("Phone Screen sizes \n\n width = "+width+" \n Height = "+height); 
4
public class DisplayInfo { 
    int screen_height=0, screen_width=0; 
    WindowManager wm; 
    DisplayMetrics displaymetrics; 

    DisplayInfo(Context context) { 
     getdisplayheightWidth(context); 
    } 

    void getdisplayheightWidth(Context context) { 
     wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
     displaymetrics = new DisplayMetrics(); 
     wm.getDefaultDisplay().getMetrics(displaymetrics); 
     screen_height = displaymetrics.heightPixels; 
     screen_width = displaymetrics.widthPixels; 
    } 

    public int getScreen_height() { 
     return screen_height; 
    } 

    public int getScreen_width() { 
     return screen_width; 
    } 
} 
0
 @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); 
     } 
1

完全办法做到这一点,它返回真实分辨率:

  WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
      Point size = new Point(); 
      wm.getDefaultDisplay().getRealSize(size); 
      final int width = size.x, height = size.y; 

而且因为这可以改变不同的方向,这里有一个解决方案(在科特林),得到它的权利,不管方向:

/** 
* returns the natural orientation of the device: Configuration.ORIENTATION_LANDSCAPE or Configuration.ORIENTATION_PORTRAIT .<br></br> 
* The result should be consistent no matter the orientation of the device 
*/ 
@JvmStatic 
fun getScreenNaturalOrientation(context: Context): Int { 
    //based on : http://stackoverflow.com/a/9888357/878126 
    val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager 
    val config = context.resources.configuration 
    val rotation = windowManager.defaultDisplay.rotation 
    return if ((rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) && config.orientation == Configuration.ORIENTATION_LANDSCAPE || (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) && config.orientation == Configuration.ORIENTATION_PORTRAIT) 
     Configuration.ORIENTATION_LANDSCAPE 
    else 
     Configuration.ORIENTATION_PORTRAIT 
} 

/** 
* returns the natural screen size (in pixels). The result should be consistent no matter the orientation of the device 
*/ 
@JvmStatic 
fun getScreenNaturalSize(context: Context): Point { 
    val screenNaturalOrientation = getScreenNaturalOrientation(context) 
    val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager 
    val point = Point() 
    wm.defaultDisplay.getRealSize(point) 
    val currentOrientation = context.resources.configuration.orientation 
    if (currentOrientation == screenNaturalOrientation) 
     return point 
    else return Point(point.y, point.x) 
} 
0

我发现味甘的回答最好一个在这个页面,这里是你如何使用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

set of utilities与Android的大小抽象的工作。

它包含一个类SizeFromDisplay.java 您可以使用它像这样:

ISize size = new SizeFromDisplay(getWindowManager().getDefaultDisplay()); 
size.width(); 
size.hight(); 
0

两个步骤。首先,扩展Activity类

class Example extends Activity 

二:使用此代码

DisplayMetrics displayMetrics = new DisplayMetrics(); 
WindowManager windowmanager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 
windowmanager.getDefaultDisplay().getMetrics(displayMetrics); 
int deviceWidth = displayMetrics.widthPixels; 
int deviceHeight = displayMetrics.heightPixels;