2012-03-11 20 views
16

Khi tôi thực hiệngetSize() đem lại cho tôi lỗi

WindowManager wm = ((WindowManager)context.getSystemService(context.WINDOW_SERVICE)); 
Display display = wm.getDefaultDisplay(); 
m_nDisplayWidth = display.getWidth(); 
m_nDisplayHeight = display.getHeight(); 

tôi có thể chạy tốt, nhưng khi tôi thực hiện getSize tôi nhận được runtimeError

Point size = new Point(); 
display.getSize(size); //Error right here 
m_nDisplayWidth = size.x; 
m_nDisplayHeight = size.y; 

Logcat:

03-11 01:45:25.865: E/AndroidRuntime(18835): FATAL EXCEPTION: main 
03-11 01:45:25.865: E/AndroidRuntime(18835): android.view.InflateException: Binary XML file line #7: Error inflating class com.brain.development.GameRun 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.view.LayoutInflater.createView(LayoutInflater.java:518) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:215) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.app.Activity.setContentView(Activity.java:1679) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at com.brain.development.BrainDevelopmentActivity$1.onClick(BrainDevelopmentActivity.java:25) 03-11 01:45:25.865: E/AndroidRuntime(18835): at android.view.View.performClick(View.java:2582) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.view.View$PerformClick.run(View.java:9252) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.os.Handler.handleCallback(Handler.java:587) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.os.Looper.loop(Looper.java:130) 03-11 01:45:25.865: E/AndroidRuntime(18835):  at android.app.ActivityThread.main(ActivityThread.java:3691) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at java.lang.reflect.Method.invokeNative(Native Method) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at java.lang.reflect.Method.invoke(Method.java:507) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at dalvik.system.NativeStart.main(Native Method) 
03-11 01:45:25.865: E/AndroidRuntime(18835): Caused by: java.lang.reflect.InvocationTargetException 
03-11 01:45:25.865: E/AndroidRuntime(18835): at java.lang.reflect.Constructor.constructNative(Native Method) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at android.view.LayoutInflater.createView(LayoutInflater.java:505) 
03-11 01:45:25.865: E/AndroidRuntime(18835): ... 19 more 
03-11 01:45:25.865: E/AndroidRuntime(18835): Caused by: java.lang.NoSuchMethodError: android.view.Display.getSize 
03-11 01:45:25.865: E/AndroidRuntime(18835): at com.brain.development.GameRun$GameThread.<init>(GameRun.java:46) 
03-11 01:45:25.865: E/AndroidRuntime(18835): at com.brain.development.GameRun.<init>(GameRun.java:97) 
03-11 01:45:25.865: E/AndroidRuntime(18835): ... 22 more 

Trả lời

70

này hỗ trợ cả các thiết bị cũ và mới hơn:

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; 
} 
+0

getWidth và getHeight là phương pháp không được chấp nhận ngay từ khi đến phương thức getSize, nhưng chỉ có thể sử dụng cho api cấp 13 trở lên, do đó không có tùy chọn nào khác ngoài việc sử dụng phương thức không dùng nữa cho các thiết bị cũ hơn. 1 cho câu trả lời ur. cảm ơn – Zoombie

0

Cố gắng sử dụng thay vào đó:

Display display = getWindowManager().getDefaultDisplay(); 

Nếu không có điều đó, tôi không thấy bất kỳ sự cố nào trong mã này ...

0

Hãy thử điều này, nó phù hợp với tôi.

getWindowManager().getDefaultDisplay().getWidth(); 
+0

getWidth() bị phản đối http://developer.android.com/reference/android/view/Display.html#getWidth() – pahan

0

Xin lỗi vì tôi đã đến muộn, nhưng hãy đảm bảo bạn đang sử dụng SDK Android 13 trở lên.

+0

Điều gì sẽ xảy ra nếu bạn muốn ứng dụng của mình chạy trên các phiên bản cũ hơn ... như hầu hết các điện thoại ngoài kia? –

4

Phương pháp để có được hiển thị Kích thước cho tất cả các thiết bị:

private static Point getDisplaySize(final Display display) { 
Point point = new Point(); 
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2){ //API LEVEL 13 
    display.getSize(point); 
}else{  
    point.x = display.getWidth(); 
    point.y = display.getHeight(); 
} 
return point; 
    } 

gettin Kích thước:

WindowManager wm = ((WindowManager)context.getSystemService(context.WINDOW_SERVICE)); 
    Display display = wm.getDefaultDisplay(); 
    Point myPoint = getDisplaySize(display); 
    Log.i("***Size X::", String.valueOf(myPoint.x)); 
    Log.i("***Size Y::", String.valueOf(myPoint.y)); 
+0

Tôi nghĩ bạn đang thiếu display.getSize() – Lukos

+0

cảm ơn bạn rất nhiều Lukos! tôi đã chỉnh sửa câu trả lời của mình! =) – Jorgesys

+1

Build.VERSION.SDK_INT yêu cầu API Android cấp 4 trở lên. – Tamara

0

Đây là phương pháp hữu ích , bạn có thể sử dụng:

public static int getWidth(Context context) { 
     WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
     Display display = windowManager.getDefaultDisplay(); 
     Point size = new Point(); 
     int width; 
     if (Build.VERSION.SDK_INT >= 13) { 
      display.getSize(size); 
      width = size.x; 

     } else { 
      width = display.getWidth(); 
     } 
     return width; 
    } 
2

Phiên bản này làm việc cho API < 4, quá:

@SuppressWarnings("deprecation") 
@TargetApi(VERSION_CODES.HONEYCOMB_MR2) 
public static Point getSize(Display display) { 
    Point point = new Point(); 
    if (sdkInt() >= VERSION_CODES.HONEYCOMB_MR2) { 
     display.getSize(point); 
    } else { 
     point.set(display.getWidth(), display.getHeight()); 
    } 
    return point; 
} 

@SuppressWarnings("deprecation") 
public static int sdkInt() { 
    return Integer.parseInt(VERSION.SDK); 
} 
Các vấn đề liên quan