2013-08-03 59 views
1

我在为Android编写应用程序。 我想在动态运行期间收集屏幕宽度,以根据显示大小绘制对话框。为此,我写了以下功能:方法getSize(Point)未定义类型Display

public static int getDisplayWidth(Context context) 
{ 
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    int width = 0; 
    if(android.os.Build.VERSION.SDK_INT >= 13) 
    { 
     Point size = new Point(); 
     display.getSize(size); //Error 
     width = size.x; 
    } 
    else 
    { 
     width = display.getWidth(); 
    } 
    return width; 
} 

但是我得到一行“display.getSize(size);”

错误:“的方法的getSize(点)是未定义的类型显示”

我使用Ecslipe作为开发环境。

Project Build Target是“Android 2.3.3”。 在Manifest.xml中我设置了: <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />

有人可以告诉我为什么会出现此错误吗? 我做错了什么?

萨普

+0

不要用2.3.3(API 10),但最新的18构建和测试2.3.3设备上 – Selvin

+0

我建立它与4.2.2,它的工作原理!谢谢 – Sapp

回答

0

较早的Android版本不具备的getSize()方法。错误是调用或链接到缺席功能。

private static Point getDisplaySize(final Display display) { 
    final Point point = new Point(); 
    try { 
     display.getSize(point); 
    } catch (java.lang.NoSuchMethodError ignore) { // Older device 
     point.x = display.getWidth(); 
     point.y = display.getHeight(); 
    } 
    return point; 
} 

尝试使用try-catch &看看是否有帮助。这应该安全地回退到旧的API,确保您的代码适用于各种设备。

真的,这有点像谷歌的一部分。

参见:

+0

尝试赶上预期的异常是错误的代码练习... – Selvin

+1

如果有必要回退到工作功能,@Selvin,则不需要。诚然,使用稳定的API,你不应该需要这种类型的hokum。但更好的是有一个工作的应用程序,而不是一个很好的“理论”。 –

+1

工作功能应如下所示:CompatHelper接口与getDisplaySize(最终显示显示)方法...两个实现OlderHelper和PostHoneyHelper和基于Build.VERSION.SDK_INT的实现选择器...应该使用最高的API进行构建。那么你不应该担心编译和运行时错误......就像它在支持库中完成的那样:-) – Selvin

相关问题