首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android DisplayMetrics在ICS上返回以像素为单位的错误屏幕尺寸

Android DisplayMetrics在ICS上返回以像素为单位的错误屏幕尺寸
EN

Stack Overflow用户
提问于 2012-06-12 13:54:26
回答 5查看 34.7K关注 0票数 24

我试过了.

代码语言:javascript
复制
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int fullscreenheight = metrics.heightPixels;
int fullscreenwidth = metrics.widthPixels;

还有……

代码语言:javascript
复制
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

Gnex的显示屏为720×1280。宽度/高度的返回结果(当然取决于方向)永远不会是1280。我想这可能与Ice Cream三明治的屏幕导航栏有关,所以我用以下方式隐藏了这一点:

代码语言:javascript
复制
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

然后,...and启动了一个不断记录屏幕大小高度/宽度的线程。即使在ICS导航栏完全关闭后,gone....the屏幕大小也不会报告1280值。我会得到这样的数字:

代码语言:javascript
复制
width  = 720
height = 1184

如何在ICS中获得真正的设备屏幕分辨率?

之所以需要这个值,是因为我的应用程序会播放视频,并且我希望当设备处于横向时,视频会占据整个屏幕。现在我知道你在想什么了,为什么不给videoview一个值"match_parent“作为高度/宽度呢?原因是因为我的视频有多个宽高比,我希望能够根据整个屏幕的宽度来计算正确的视频大小。

EN

回答 5

Stack Overflow用户

发布于 2013-07-07 22:08:42

根据Ahmed的回答,这是没有错误的完整代码:

代码语言:javascript
复制
    int width = 0, height = 0;
    final DisplayMetrics metrics = new DisplayMetrics();
    Display display = getWindowManager().getDefaultDisplay();
    Method mGetRawH = null, mGetRawW = null;

    try {
        // For JellyBean 4.2 (API 17) and onward
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
            display.getRealMetrics(metrics);

            width = metrics.widthPixels;
            height = metrics.heightPixels;
        } else {
            mGetRawH = Display.class.getMethod("getRawHeight");
            mGetRawW = Display.class.getMethod("getRawWidth");

            try {
                width = (Integer) mGetRawW.invoke(display);
                height = (Integer) mGetRawH.invoke(display);
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    } catch (NoSuchMethodException e3) {  
        e3.printStackTrace();
    }
票数 21
EN

Stack Overflow用户

发布于 2015-02-28 19:23:07

您可以使用getRealSize来获取屏幕分辨率。API 17及更高版本官方支持,但从API 14开始SDK中实际存在。如果您使用API 17或更高版本的SDK平台,则可以正常访问该方法,只需绕过仅在API 17中可用的警告即可。

代码语言:javascript
复制
/**
 * Gets the device's native screen resolution rotated
 * based on the device's current screen orientation.
 */
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) //To remove warning about using
                                               //getRealSize prior to API 17
private Point screenResolution() {
    WindowManager windowManager =
        (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = windowManager.getDefaultDisplay();
    Point screenResolution = new Point();

    if (Build.VERSION.SDK_INT < 14)
        throw new RuntimeException("Unsupported Android version.");
    display.getRealSize(screenResolution);

    return screenResolution;    
}

我已经在一个真实的Android5.0.2设备和一个运行4.1.1 (可能还有其他版本)的模拟器上测试过了。

感谢pointing this out in the commentsbenc

票数 11
EN

Stack Overflow用户

发布于 2013-04-29 18:51:32

尝尝这个

代码语言:javascript
复制
    final DisplayMetrics metrics = new DisplayMetrics(); 
    Display display = getWindowManager().getDefaultDisplay();     
    Method mGetRawH = null,mGetRawW = null;

    try {
                    // For JellyBeans and onward
        if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN){
            display.getRealMetrics(metrics);

            realWidth = metrics.widthPixels;
            realHeight = metrics.heightPixels;
        }else{
            mGetRawH = Display.class.getMethod("getRawHeight");
            mGetRawW = Display.class.getMethod("getRawWidth");

            try {
                realWidth = (Integer) mGetRawW.invoke(display);
                realHeight = (Integer) mGetRawH.invoke(display);
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10991194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档