如何在Android设备上以编程方式获取总屏幕尺寸

8
如果我使用此处显示的代码来获取总屏幕大小,则其高度始终小于设备的文档规格所示的总屏幕大小。例如,我尝试使用代码获取被列为1280 X 800的平板电脑的屏幕大小,而代码的结果是:1216 X 800。那么丢失的64个像素去了哪里呢?
我猜测可能是屏幕底部包含返回和主页按钮的栏,但这听起来不太对,因为内容视图应该是所有视图的根源。这里到底发生了什么?
唯一可能的解释可能是UI的这一部分。
用于获取屏幕大小的代码。
  // gets the content view windows width and height size
   DisplayMetrics displaymetrics = new DisplayMetrics();
   getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
   int widthContentView = displaymetrics.widthPixels;
   int heightContentView = displaymetrics.heightPixels;
   Toast.makeText(MainActivity.this, "width of content view: " + widthContentView  Toast.LENGTH_SHORT).show();
   Toast.makeText(MainActivity.this, "height of content view: " + heightContentView, Toast.LENGTH_SHORT).show();

我认为这个链接将解释一切: Android dimension - Pull
8个回答

8

如果您在Activity之外调用此方法,则需要传递上下文(或通过其他调用获取上下文)。然后使用该上下文获取您的显示度量:

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

这个完美地运行了。从目前我所看到的来看,它将在API 1上工作。其他一些选项让我改变我的minAPI到更高的版本,而我并不想改变它。 - Matt

3

我不确定你使用的是哪个API,但如果你使用从17开始的API,你可以使用以下内容:

display.getRealSize();

2
try this code...

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


it will give screen's width and height,And according to width and height write if-    conditions for each device's screen resolution. 

1
你是正确的,它显示了你的应用屏幕分辨率,因此你得到了差异。不要使用getMetrics(),而是使用getRealMetrics()。你可以使用以下代码来获取设备的实际屏幕大小。
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();

    DisplayMetrics metrics = new DisplayMetrics();
    display.getRealMetrics(metrics);
    int width = metrics.widthPixels;
    int height = metrics.heightPixels;

    return width + "*" + height;

0
在 StackOverFlow 上搜索了数小时,没有找到一个最新的答案,所以想和大家分享我的。希望这有所帮助。 :)

方法 1(已弃用)

fun Resolution() : String {
        var width : Int? = 0
        var height : Int? = 0
        try {
            val displayMetrics = DisplayMetrics()
            val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
            windowManager.defaultDisplay.getRealMetrics(displayMetrics)
            width = displayMetrics.widthPixels
            height = displayMetrics.heightPixels
        }catch (e : Exception){
            e.printStackTrace()
            Log.e("DisplayClass", e.message, e)
        }
        return "$width x $height pixels"
    }

getRealMetrics(displayMetrics)和getMetrics(displayMetrics)之间的区别在于,getMetrics()将返回高度/宽度,而不会添加状态栏和导航栏的大小。

windowManager.defaultDisplay.getRealMetrics(displayMetrics) // 例如:1080 x 2340

windowManager.defaultDisplay.getMetrics(displayMetrics) // 例如:1080 x 2260

方法2(已弃用)(最低API:30(R))

此方法返回与getMetrics()相同的结果

@RequiresApi(Build.VERSION_CODES.R)
    fun Resolution() : String {
        
        val width = context.display?.width
        val height = context.display?.height
        
        return "$width x $height"
        
    }

方法三(截至2022年8月24日仍有效)

fun Resolution() : String {
        var width: Int? = 0
        var height : Int? = 0

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){
            val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
            val metrics = windowManager.currentWindowMetrics

            width = metrics.bounds.width()
            height = metrics.bounds.height()

        }else{
            val displayMetrics = DisplayMetrics()
            val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
            windowManager.defaultDisplay.getRealMetrics(displayMetrics)
            width = displayMetrics.widthPixels
            height = displayMetrics.heightPixels
        }

        return "$width x $height"

    }

0
int density;
    private DisplayMetrics metrics;
    private int widthPixels;
    private float scaleFactor;
    private float widthDp;
metrics = new DisplayMetrics();
                getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);

                density= getResources().getDisplayMetrics().densityDpi;

                widthPixels = metrics.widthPixels;

                scaleFactor = metrics.density;

                widthDp = widthPixels / scaleFactor;
System.out.println("widthDp== "+widthDp );
if(density==DisplayMetrics.DENSITY_HIGH)
                        System.out.println("Density is high");

                    if(density==DisplayMetrics.DENSITY_XXHIGH)
                        System.out.println("Density is xxhigh");

                    if(density==DisplayMetrics.DENSITY_XXXHIGH)
                        System.out.println("Density is xxxhigh");

                    if(density==DisplayMetrics.DENSITY_TV)
                        System.out.println("Density is Tv");

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

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

-1
获取所有显示器并将宽度和高度设置为您所需的尺寸。
    Display display;
    display=getWindowManager().getDefaultDisplay();
    text1.setWidth(display.getWidth()-380);
    text1.setHeight(display.getHeight()-720);

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