2013-08-03 64 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

相關問題