首页 文章

如何获得屏幕宽度和高度

提问于
浏览
52

我尝试使用以下代码来获取Android应用程序开发中的屏幕宽度和高度:

Display display = getWindowManager().getDefaultDisplay(); 
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();

但为了我的 display ,我得到了 NullPointerException ,为什么?如何获得屏幕宽度和高度呢?

14 回答

  • 0
    int scrWidth  = getWindowManager().getDefaultDisplay().getWidth();
        int scrHeight = getWindowManager().getDefaultDisplay().getHeight();
    
  • 0
    Display display = getActivity().getWindowManager().getDefaultDisplay(); 
    int screenWidth = display.getWidth();
    int screenHeight = display.getHeight();
    Log.d("Tag", "Getting Width >> " + screenWidth);
    Log.d("Tag", "Getting Height >> " + screenHeight);
    

    这在我的应用程序中正常工作

  • 2

    如果您在Activity之外调用它,则需要传递上下文(或通过其他调用获取) . 然后使用它来获取显示指标:

    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    int width = metrics.widthPixels;
    int height = metrics.heightPixels;
    

    更新:使用API级别17,您可以使用getRealSize

    Point displaySize = new Point();
    activity.getWindowManager().getDefaultDisplay().getRealSize(displaySize);
    

    如果需要可用的窗口大小,可以使用getDecorView通过从实际显示大小中减去装饰视图大小来计算可用区域:

    Point displaySize = new Point();
    activity.getWindowManager().getDefaultDisplay().getRealSize(displaySize);
    
    Rect windowSize = new Rect();
    ctivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(windowSize);
    
    int width = displaySize.x - Math.abs(windowSize.width());
    int height = displaySize.y - Math.abs(windowSize.height());
    return new Point(width, height);
    

    getRealMetrics也可能有效(需要API级别17),但我还没有尝试过:

    DisplayMetrics metrics = new DisplayMetrics();
    activity.GetWindowManager().getDefaultDisplay().getRealMetrics(metrics);
    
  • 7

    在活动中,您可以致电:

    int width = this.getResources().getDisplayMetrics().widthPixels;
    int height = this.getResources().getDisplayMetrics().heightPixels;
    

    当您在View中时,您需要首先获取Context:

    int width = getApplicationContext().getResources().getDisplayMetrics().widthPixels;
    int height = getApplicationContext().getResources().getDisplayMetrics().heightPixels;
    

    这适用于所有Android版本,自API 1起可用,并且从不弃用 .

  • 4

    来自服务:

    Display  display= ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    int width = display.getWidth(); 
    int height = display.getHeight();
    
  • 126

    这最终对我有用:

    DisplayMetrics metrics = this.getResources().getDisplayMetrics();
    int width = metrics.widthPixels;
    int height = metrics.heightPixels;
    
  • 0

    如果您有可用的上下文,请尝试通过 context.getResources().getDisplayMetrics() .

  • 34
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    
    int height = metrics.heightPixels;
    int width = metrics.widthPixels;
    

    我想你写的代码已被弃用 .

  • 1
    if (Build.VERSION.SDK_INT >= 11) {
            Point size = new Point();
            try {
                this.getWindowManager().getDefaultDisplay().getRealSize(size);
                screenWidth = size.x;
                screenHeight = size.y;
            } catch (NoSuchMethodError e) {
                 screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();
                 screenWidth=this.getWindowManager().getDefaultDisplay().getWidth();
            }
    
        } else {
            DisplayMetrics metrics = new DisplayMetrics();
            this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
            screenWidth = metrics.widthPixels;
            screenHeight = metrics.heightPixels;
        }
    
  • 15

    尝试使用以下代码获取屏幕的宽度和高度

    int widthOfscreen =0;
    int heightOfScreen = 0;
    DisplayMetrics dm = new DisplayMetrics();
            try {
                ((Activity) context).getWindowManager().getDefaultDisplay()
                        .getMetrics(dm);
            } catch (Exception ex) {
            }
             widthOfscreen  = dm.widthPixels;
    heightOfScreen  = dm.heightPixels;
    
  • 11
    WindowManager w = getWindowManager();
    Display d = w.getDefaultDisplay();
    DisplayMetrics metrics = new DisplayMetrics();
    d.getMetrics(metrics);
    
    Log.d("WIDTH: ", String.valueOf(d.getWidth()));
    Log.d("HEIGHT: ", String.valueOf(d.getHeight()));
    
  • 2
    /*
            *DisplayMetrics: A structure describing general information about a display, such as its size, density, and font scaling.
            * */
    
     DisplayMetrics metrics = getResources().getDisplayMetrics();
    
           int DeviceTotalWidth = metrics.widthPixels;
           int DeviceTotalHeight = metrics.heightPixels;
    
  • 2

    使用功能的替代方式

    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;
    
        }
    

    按钮单击或在您的创建功能上添加以下代码

    int[] screenSize= getScreenSIze();
            int width=screenSize[0];
            int height=screenSize[1];
            screenSizes.setText("Phone Screen sizes \n\n  width = "+width+" \n Height = "+height);
    

    See demo source code

  • 18

    以下答案支持api级别低于10以上

    if (Build.VERSION.SDK_INT >= 11) {
                Point size = new Point();
                try {
                    this.getWindowManager().getDefaultDisplay().getRealSize(size);
                    screenWidth = size.x;
                    screenHeight = size.y;
                } catch (NoSuchMethodError e) {
                     screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();
                     screenWidth=this.getWindowManager().getDefaultDisplay().getWidth();
                }
    
            } else {
                DisplayMetrics metrics = new DisplayMetrics();
                this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
                screenWidth = metrics.widthPixels;
                screenHeight = metrics.heightPixels;
            }
    

相关问题