三星设备间歇性地报告屏幕宽度不正确

时间:2016-10-21 16:15:48

标签: android samsung-mobile android-windowmanager

在我们的应用程序中,我们需要在启动时确定屏幕宽度。我们尝试使用几种不同的方法获得此宽度(请参阅下面的列表),但三星设备,尤其是它们的Galaxy设备,有时会给我们不正确的值。

我们有一个Galaxy s6,分辨率为1440 x 2560像素。大多数情况下,设备会报告宽度为1440,但偶尔会给我们宽度为1080.

我们尝试通过以下方式获取宽度:

1)

getResources().getDisplayMetrics().widthPixels;

2)

WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);

3)

WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getRealSize(size);

但在所有情况下,我们都会看到返回的宽度不正确。当我们的应用程序第一次启动时,我们可以看到不正确的值。任何帮助都将非常感激。

3 个答案:

答案 0 :(得分:0)

你试过这个吗?

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int screenWidth = metrics.widthPixels;

<强>更新

稍微hardcore。 您可以找到更多here

答案 1 :(得分:0)

这是我们的getDeviceWidth()方法,我们从来没有遇到任何麻烦,但我想这是你的第二个版本?!请验证并发表评论。 (确保在创建视图后调用此方法。)

public static int getDeviceWidth(Activity activity) {

    Display display = activity.getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    return size.x;
}

否则我会尝试获得将其宽度设置为match_parent的虚拟布局的y位置(或宽度)。

在开始时和应用程序运行后测试你的getWidth(点击按钮时f.e。)。在运行时也会返回错误的宽度吗?

答案 2 :(得分:0)

在我的方法中,我没有遇到任何问题,无法找到正确的位置或任何Android屏幕的确切大小。

  

我的方法找到以英寸为单位的屏幕尺寸以及以像素和英寸为单位的屏幕高度和宽度

在我的应用中,此方法是我检查平板电脑是否正在使用我的应用的方法:

private void tabletChanges() {
    DisplayMetrics dm = new DisplayMetrics();
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
    int width = dm.widthPixels;
    int height = dm.heightPixels;
    int dens = dm.densityDpi;
    double wi = (double)width/dm.xdpi;
    double hi = (double)height/dm.ydpi;
    double x = Math.pow(wi,2);
    double y = Math.pow(hi,2);
    double screenInches = Math.sqrt(x+y);

    if(screenInches >= 7){
        //Do certain things
    }
}