与DisplayMetrics和WebView中的$(window).width()的宽度和高度不同

时间:2017-03-11 13:05:59

标签: android webview

在Android应用中,我尝试使用以下方式获取屏幕宽度和高度:

DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        final int screenWidth = metrics.widthPixels;
        final int screenHeight = metrics.heightPixels;

这分别为我的手机报告1080和1920,与规格相符。

但是,在webview中,当我使用时:

var screenWidth = $(window).width();

此报告仅为360.

根据我的理解,两者都使用像素作为单位,那么为什么值不同?

4 个答案:

答案 0 :(得分:5)

两种情况下的注意宽度相同,但单位不同。

E.g。

这是像素 metrics.widthPixels;

这是Dps 360 OR $(窗口).width();

将360Dps转换为像素

在xxhdpi设备上,360dps = 1080px

Dp to pixels & vice versa

答案 1 :(得分:1)

您可以使用getResources().getDisplayMetrics()方法获取displayMetrics。

DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); 
final int screenWidth = metrics.widthPixels;
final int screenHeight = metrics.heightPixels;

答案 2 :(得分:1)

我使用这个简单的方法(在utils类中)来转换px< - > DP。

public static int convertIntToDp(int inputValue, DisplayMetrics displayMetrics){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, inputValue, displayMetrics);
    }

我希望能帮到你

答案 3 :(得分:1)

我发现你的设备的dpi属于 xxhdpi

其中300 dpi可以转换为 1080像素宽度。  here

和640 dpi可以转换为 1920 像素。

你也可以包括;

 private int convertDpToPixel(int dp) {
    Resources r = getResources();
    float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, 
r.getDisplayMetrics());
    return (int) px;
}