2012-03-11 13 views
16

जब मैंgetSize() मुझे दे रही त्रुटियों

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

मैं ठीक चला सकते हैं, लेकिन जब मैं getSize लागू मैं 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 

उत्तर

70

यह दोनों पुरानी और नई उपकरणों का समर्थन करता: सभी उपकरणों के लिए प्रदर्शन आकार पाने के लिए

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 और getHeight अब getSize विधि के आगमन के बाद विधियों को बहिष्कृत कर रहे हैं, लेकिन यह केवल एपीआई स्तर 13 और ऊपर के लिए उपयोग योग्य है, इसलिए पुराने डिवाइस के लिए बहिष्कृत विधि का उपयोग करने के अलावा कोई विकल्प नहीं है। आपके उत्तर के लिए +1। धन्यवाद – Zoombie

0

करने की कोशिश करो इसके बजाय इसका उपयोग करें:

Display display = getWindowManager().getDefaultDisplay(); 

कि बिना, मैं इस कोड में कोई समस्या नहीं दिख रहा है ...

0

इस प्रयास करें, यह मेरे लिए काम करता है।

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

getWidth() हटाई गई है http://developer.android.com/reference/android/view/Display.html#getWidth() – pahan

0

क्षमा करें कि मैं पार्टी के लिए देर हो चुकी हूं, लेकिन सुनिश्चित करें कि आप एंड्रॉइड एसडीके 13 या उससे ऊपर का उपयोग कर रहे हैं।

+0

क्या होगा यदि आप अपने ऐप को पुराने संस्करणों पर चलाना चाहते हैं ... जैसे अधिकांश फोन वहां हैं? –

4

विधि:

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

मिल रहा है आकार:

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

मुझे लगता है कि आप डिस्प्ले खो रहे हैं .getSize() – Lukos

+0

आपको बहुत धन्यवाद लुकोस! मैंने अपनी प्रतिक्रिया संपादित की है! =) – Jorgesys

+1

Build.VERSION.SDK_INT को एंड्रॉइड एपीआई स्तर 4 या उच्चतम की आवश्यकता है। – Tamara

0

यहाँ उपयोगिता विधि है , आप इसका उपयोग कर सकते हैं:

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

इस संस्करण में, एपीआई < 4 के लिए काम करता भी:

@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); 
} 
संबंधित मुद्दे