不使用getMetrics获取屏幕大小

时间:2017-04-10 09:26:31

标签: android size screen resolution

我想获得手机屏幕的大小,但它一直给我错误的值,我已经用过了

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,这是真正的价值。 我尝试了很多解决方案,但没有发现任何好处。

由于

5 个答案:

答案 0 :(得分:0)

使用此

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

答案 1 :(得分:0)

这肯定会有用。

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

答案 2 :(得分:0)

尝试this link

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

答案 3 :(得分:0)

以下方法会返回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:这是用于获取显示尺寸的代码电报

答案 4 :(得分:0)

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