2010-05-25 13 views
9

यह एक बहुत ही सरल सवाल है जिस पर मुझे कोई जवाब नहीं मिला है:/ मैं पूर्ण रूप से स्क्रीन रिज़ॉल्यूशन (चौड़ाई, ऊंचाई) को पूर्णांक मानों के रूप में कैसे एक्सेस कर सकता हूं?एंड्रॉइड: स्क्रीन रिज़ॉल्यूशन/पिक्सल को पूर्णांक मानों के रूप में प्राप्त करें

मैं इस एक कोशिश की है, लेकिन यह हमेशा शून्य मेरी एमुलेटर पर पता चलता है:

DisplayMetrics dm = new DisplayMetrics(); 
int width = dm.widthPixels/2; 

मेरे मामले में मैं गतिशील tableRows के साथ एक मेज बनाना चाहते हैं, प्रत्येक दो कॉलम हैं। यह कॉल सभी चौड़ाई में स्क्रीन के आधा भर देंगे।

क्या कोई मुझे संकेत दे सकता है?

+0

सिर्फ एक अनुमान होने - DisplayMetrics से पुनर्प्राप्त मान पहले ड्रॉ तक मान्य नहीं हो सकते हैं। क्या आप इसे ऑन्रेट या ऑन या ड्रा पर देख रहे हैं? – SteelBytes

+0

वास्तविक कारण क्यों शून्य था क्योंकि शून्य int में जावा में डिफ़ॉल्ट मान है। 'dm.widthPixels' प्रारंभ नहीं किया गया था, इसलिए यह मान शून्य है और दो से विभाजित शून्य शून्य भी है ... आपको 'mView.getContext()। getResources()। getDisplayMetrics()' – Armin

उत्तर

3

onSizeChanged को लागू करने का सबसे आसान तरीका होगा। आपको शायद 0 का मान मिल रहा है क्योंकि दृश्य अभी तक प्रारंभ नहीं हुआ है। उदाहरण के लिए आप व्यू कन्स्ट्रक्टर में उपरोक्त कोड को कॉल नहीं कर सकते हैं।

+0

जैसे कुछ करने की कोशिश करनी चाहिए तो यह क्या करता है मेरे लिए मतलब है, जब मैं गतिशील रूप से टेबलरो जोड़ना चाहता हूं और फिनिशिंग के बाद मुख्य लाइनरलाइट में तालिका जोड़ना चाहता हूं और इसे एक सामग्री दृश्य में सेट कर सकता हूं (इस .setContentView (ll) का उपयोग करके, मेरा लाइनरलाइट कहाँ होगा? – poeschlorn

+0

ऑन साइज चेंजड को पहले कहा जाएगा समय आपका दृश्य खींचा जाता है और जब भी अभिविन्यास बदलता है। जब इसे कहा जाता है, तो अपनी कक्षाओं के सदस्यों में स्क्रीन के आयामों को संग्रहित करें। जब आप ड्राइंग करते हैं तो इन मानों का उपयोग करें (ऑनड्रा विधि में)। – kgiannakakis

+0

धन्यवाद, मैं कोशिश कर रहा हूं यह :) – poeschlorn

17

आप इस तरह से स्क्रीन मीट्रिक प्राप्त कर सकते हैं:

Display d = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width = d.getWidth(); 
int height = d.getHeight(); 
+3

यह सही उत्तर चिह्नित किया जाना चाहिए – emaillenin

+1

मुझे कोई और स्पष्टीकरण के साथ @ डिप्रेटेड चेतावनी मिलती है। Guillaume Perrot का उत्तर – Moak

+0

@Moak का उपयोग किया गया था, इसे एंड्रॉइड एपीआई 13 से हटा दिया गया था। [डॉक्स] (http://developer.android देखें।com/संदर्भ/एंड्रॉयड/देखें/Display.html # getWidth% 28% 29)। –

4

मैं निम्नलिखित का उपयोग करें:

int scrWidth = getWindowManager().getDefaultDisplay().getWidth(); 
int scrHeight = getWindowManager().getDefaultDisplay().getHeight(); 

कोई अव्यवस्था, कोई उपद्रव, सिर्फ 2 वर्ग चर

32

trashkalmar जवाब है सही बात।

हालांकि, परिणाम गतिविधि संदर्भ के लिए विशिष्ट होंगे। यदि आप पूरे डिवाइस स्क्रीन रिज़ॉल्यूशन चाहते हैं:

DisplayMetrics displayMetrics = new DisplayMetrics(); 
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut 
wm.getDefaultDisplay().getMetrics(displayMetrics); 
int screenWidth = displayMetrics.widthPixels; 
int screenHeight = displayMetrics.heightPixels; 

ध्यान दें कि परिणाम वर्तमान डिवाइस अभिविन्यास पर भी निर्भर करते हैं।

+0

बिल्कुल सही! ... ... ... –

5

1. स्क्रीन चौड़ाई और ऊंचाई पिक्सेल प्राप्त करने के लिए बस अंदरूनी गतिविधि का उपयोग करें।

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay() 
    .getMetrics(metrics); 
int width = metrics.widthPixels; 
int height = metrics.heightPixels; 

2. इस का भी इस्तेमाल किया जा सकता है लेकिन जाँच inlined

Display display = getWindowManager().getDefaultDisplay(); 

Point size = new Point(); 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 
    display.getSize(size); 
    int width2 = size.x; 
    int height2 = size.y; 

} else { 
    int width2 = display.getWidth(); 
    int height2 = display.getHeight(); 
} 

यह 3.Use जब आप गतिविधि में नहीं हैं एपीआई स्तर की आवश्यकता है लेकिन संदर्भ

WindowManager wm = (WindowManager) context.getSystemService(
      Context.WINDOW_SERVICE); 
Display display1 = wm.getDefaultDisplay(); 
Point size1 = new Point(); 

int width1; 
int height1; 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 

    display1.getSize(size1); 
    width1 = size1.x; 
    height1 = size1.y; 

} else { 
    width2 = display.getWidth(); 
    height2 = display.getHeight(); 
} 
संबंधित मुद्दे