在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个回答

4
Display display = ((WindowManager) this.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int mWidthScreen = display.getWidth();
int mHeightScreen = display.getHeight();

已弃用,请使用DisplayMetrics()。 - deyanm

4

看起来所有这些答案对我的 Android 11 Galaxy M51 都无效。在做了一些研究后,我发现了以下代码:

WindowMetrics windowmetrics = MainActivity.getWindowManager().getCurrentWindowMetrics();
Rect rect = windowmetrics.getBounds();
int width = rect.right;
int height =rect.bottom;

显示我真实的设备分辨率为1080x2400,其余只返回810x1800。


需要API 30。 - user1608385

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

4
我使用以下代码来获取屏幕尺寸。
getWindow().getDecorView().getWidth()
getWindow().getDecorView().getHeight()

这不是技术上的屏幕尺寸,但这很有帮助,因为这些尺寸不包含状态栏和底部栏等内容。 - hordurh

3

这里展示的方法已经过时,但仍然可用。需要API 13。

查看它

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

3

在安卓官方文档中提到,对于默认显示请使用 Context#getDisplay() 方法,因为该方法已在 API level 30 中被弃用。

getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

这段代码帮助确定宽度和高度。

public static int getWidth(Context context) {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    Display display = context.getDisplay();
    if (display != null) {
        display.getRealMetrics(displayMetrics);
        return displayMetrics.widthPixels;
    }
    return -1;
}

针对高度:

public static int getHeight(Context context) {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    Display display = context.getDisplay();
    if (display != null) {
        display.getRealMetrics(displayMetrics);
        return displayMetrics.heightPixels;
    }
    return -1;
}

这在 AndroidManifiest.xml 中需要特殊权限吗? - dilshan
1
不需要任何特殊权限来执行此操作。 - Kishan Donga
@Krishan Donga非常感谢您的快速回复... - dilshan

2

尝试以下这段 Kotlin 代码

 val display = windowManager.defaultDisplay
 val size = Point()
 display.getSize(size)
 var DEVICE_WIDTH = size.x
 var DEVICE_HEIGHT = size.y

1
val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)

var width = displayMetrics.widthPixels
var height = displayMetrics.heightPixels

defaultDisplay已经被弃用,但目前它还可以使用。 - Aman Thakur

1
只需使用下面的函数,它会返回屏幕尺寸的宽度和高度作为整数数组。
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);

1

我更新了有关Kotlin语言的答案!

对于Kotlin:您应该调用Window Manager并获取指标。之后就很容易了。

val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)

var width = displayMetrics.widthPixels
var height = displayMetrics.heightPixels

我们如何使用Kotlin语言在独立活动中有效地使用它?

在这里,我创建了一个通用的Kotlin类中的方法。您可以在所有活动中使用它。

private val T_GET_SCREEN_WIDTH:String = "screen_width"
private val T_GET_SCREEN_HEIGHT:String = "screen_height"

private fun getDeviceSizes(activity:Activity, whichSize:String):Int{

    val displayMetrics = DisplayMetrics()
    activity.windowManager.defaultDisplay.getMetrics(displayMetrics)

    return when (whichSize){
        T_GET_SCREEN_WIDTH -> displayMetrics.widthPixels
        T_GET_SCREEN_HEIGHT -> displayMetrics.heightPixels
        else -> 0 // Error
    }
}

1
也许更好的解决方案是为 Activity 类创建一个扩展函数。 - Micer

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