2012-03-11 18 views
16

getSize() bana veriyorsun hataları

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 

cevap

70

Bu yeni ve eski cihazlarını destekler: tüm cihazlar için Ekran Boyutu almak için

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 ve getHeight, getSize yönteminin gelmesinden bu yana artık kullanımdan kaldırılmış yöntemlerdir, ancak yalnızca 13 numaralı ve daha yüksek düzeydeki api için kullanılabilir, bu nedenle eski aygıtlar için kullanımdan kaldırılmış bir yöntemin kullanılması gerekmez. Ur cevap için +1. teşekkürler – Zoombie

0

deneyin yerine kullanın:

Display display = getWindowManager().getDefaultDisplay(); 

Bu kodda herhangi bir sorun görmüyorum ...

0

Bunu deneyin, benim için çalışıyor. Geç partiye dilerim ama android sdk 13 veya üzeri kullandığınızdan emin olun

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

GetWidth() kullanımdan kaldırıldı http://developer.android.com/reference/android/view/Display.html#getWidth() – pahan

0

üzgünüm.

+0

Uygulamanızın eski sürümlerde yayınlanmasını isterseniz ... çoğu telefondaki gibi mi? –

4

Yöntemi:

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 Boyutu:

İşte
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

Ben eksik display.getSize() – Lukos

+0

çok teşekkür ederim Lukos teşekkür ederim! Cevabımı düzenledim! =) – Jorgesys

+1

Build.VERSION.SDK_INT, Android API 4 veya daha yüksek bir seviye gerektirir. – Tamara

0

yarar yöntemidir Kullanabileceğiniz:

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

Bu sürüm de API < 4 için çalışır:

@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); 
}