不使用 getMetrics 获取屏幕大小

Get the size of the screen not using getMetrics

我想获取手机屏幕的大小,但它总是给我错误的值,我已经使用了

WindowManager windowmanager = (WindowManager)      
getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
Display display = windowmanager.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
display.getMetrics(displayMetrics);

float deviceWidth = displayMetrics.widthPixels;
float deviceHeight = displayMetrics.ydpi;

我也试过这段代码:

Resources resources = getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
// Note, screenHeightDp isn't reliable
// (it seems to be too small by the height of the status bar),
// but we assume screenWidthDp is reliable.
// Note also, dm.widthPixels,dm.heightPixels aren't reliably pixels
// (they get confused when in screen compatibility mode, it seems),
// but we assume their ratio is correct.
double screenWidthInPixels = (double)config.screenWidthDp *dm.density;
double screenHeightInPixels = screenWidthInPixels * dm.heightPixels     / dm.widthPixels;
deviceWidth = (int)(screenWidthInPixels + .5);
deviceHeight = (int)(screenHeightInPixels + .5);

还有:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    Point realSize = new Point();
    display.getRealSize(realSize);
    deviceWidth= realSize.x;
    deviceHeight = realSize.y;
}

但是在 sdk 7.0 的三星 S7 上,我得到的 1920x1080 是错误的,因为在 sdk 6.0.1 的 S7 上,我得到的是 2560x1440,这是真正的价值。 我尝试了很多解决方案,但没有找到任何好的解决方案。

谢谢

使用这个

  getWindowManager().getDefaultDisplay().getHeight();
    getWindowManager().getDefaultDisplay().getWidth();

这肯定有效。

try { 
display.getRealSize(size);
 height = size.y; 
width=size.x;
} catch (NoSuchMethodError e) {
height = display.getHeight();
width=display.getWidth();
}

尝试this link

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

下面的方法 return a Point 包含显示 大小(x 为宽度,y 为高度):

public static Point checkDisplaySize(Context context) {
        Point tempDisplaySize = new Point();
        try {
            WindowManager manager = (WindowManager) context().getSystemService(Context.WINDOW_SERVICE);
            if (manager != null) {
                Display display = manager.getDefaultDisplay();
                if (display != null) {
                    display.getSize(tempDisplaySize);
                    Log.d("tmessages", "display size = " + displaySize.x + " " + displaySize.y);
                }
            }
        } catch (Exception e) {
            Log.e("tmessages", e.getMessage(), e);
        }
        return tempDisplaySize;
    }

P.S:这是 Telegram 用于获取显示大小的代码。

您的代码是正确的。以防万一,如果您想知道为什么会得到这些值,那是因为您的 phone 会在更新到 7.0 (Nougat) 后自动将默认分辨率大小设置为 1920x1080 以节省电池寿命。 Nougat 中的一项新功能是显示缩放选项,您可以在其中将 phone(在本例中为 S7)设置为 3 种可用模式(WQHD (2560x1440)、FHD (1920x1080) 和 HD (1280x720)) .尝试转到 Settings -> Display 并根据需要更改设置。您可以在这里阅读更多内容:Galaxy S7 on Nougat defaults to 1080p