不使用 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
我想获取手机屏幕的大小,但它总是给我错误的值,我已经使用了
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