如何获取 android Honeycomb 系统的屏幕宽度和高度?

Posted

技术标签:

【中文标题】如何获取 android Honeycomb 系统的屏幕宽度和高度?【英文标题】:How can I get android Honeycomb system's screen width and height? 【发布时间】:2011-10-31 23:15:59 【问题描述】:

我的代码:

Display display = activity.getWindowManager().getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
display.getMetrics(displayMetrics);

System.out.println("screen width:"+displayMetrics.widthPixels);
System.out.println("screen heigth:"+displayMetrics.heightPixels);

当我在 android Honeycomb 系统中运行这个程序时,输出是 800 和 1232 但是设备的屏幕是800_1280,我可以得到吗? 谢谢。

【问题讨论】:

看起来它只是告诉你窗口大小 - 如果你将它设置为全屏,你可能会得到完整大小 您如何获得这些维度值? 1232 的高度实际上是屏幕尺寸减去导航栏高度(底部带有返回、主页等按钮的栏)(即 1280 - 48 = 1232)。因此,您将获得 Activity 的可用屏幕空间(假设您将其设置为无标题栏)。问题是我尝试了与您相同的代码,但我得到了 800x1280 的绝对屏幕尺寸返回给我。我实际上想知道 YOU 如何让它返回 1232。我在 3.1 版上测试了我的代码 【参考方案1】:

这段代码对我有用(如果您不介意使用未记录的方法):

Display d = getWindowManager().getDefaultDisplay();
int width, height;

Method mGetRawH;
Method mGetRawW;
try 
    mGetRawH = Display.class.getMethod("getRawWidth");
    mGetRawW = Display.class.getMethod("getRawHeight");
    width = (Integer) mGetRawW.invoke(d);
    height = (Integer) mGetRawH.invoke(d);
 catch (NoSuchMethodException e) 
    e.printStackTrace();
 catch (IllegalArgumentException e) 
    e.printStackTrace();
 catch (IllegalAccessException e) 
    e.printStackTrace();
 catch (InvocationTargetException e) 
    e.printStackTrace();


//You should care about orientation here
int o = getResources().getConfiguration().orientation;
if (o == Configuration.ORIENTATION_PORTRAIT) 
    if (width > height) 
        int tmp = width;
        width = height;
        height = tmp;
    
 else if (o == Configuration.ORIENTATION_LANDSCAPE) 
    if (width < height) 
        int tmp = width;
        width = height;
        height = tmp;
    


Log.d("d", "w=" + width + " h=" + height);

【讨论】:

【参考方案2】:

其实设备全屏width=800 and height=1280(including status bar, title bar)。如果你运行你的代码来获取显示大小,系统不会包含状态栏高度和标题栏高度,所以你会得到height as 1232 (1280-(status bar height + title bar height))

【讨论】:

【参考方案3】:

1280 x 752 - 横向 800 x 1232 - 纵向

这 48 px 用于 Andriod 默认通知栏...

【讨论】:

以上是关于如何获取 android Honeycomb 系统的屏幕宽度和高度?的主要内容,如果未能解决你的问题,请参考以下文章

Android Honeycomb:如何更改 FrameLayout 中的片段,而不重新创建它们?

Android Honeycomb:如何更改 FrameLayout 中的片段,而不重新创建它们?

Android Honeycomb 中的加载程序

Android HoneyComb DatePicker 文本颜色

Android:BitmapFactory.nativeDecodeAsset 处的 OutOfMemoryError(Honeycomb 3.0 及更高版本)

ActionBar pre Honeycomb