2011-03-25 7 views
9

मैं एक एंड्रॉइड ऐप खत्म कर रहा हूं, जो कि शेष है, कई उपकरणों के लिए यूआई लेआउट और ग्राफिक्स को अनुकूलित करना है। मुझे स्क्रीन पर विशेष स्थिति में रखे गए विशेष तत्वों की आवश्यकता है।एंड्रॉइड और एकाधिक स्क्रीन लेआउट का समर्थन

एंड्रॉइड दस्तावेज़ बताते हैं कि एकाधिक स्क्रीन संकल्प और आकार वर्गीकृत कैसे होते हैं, और संसाधन टैगिंग सिस्टम की व्याख्या करते हैं।

उदाहरण के लिए, WVGA800 (480x800) और WVGA854 (480x854) दोनों को सामान्य उच्च घनत्व स्क्रीन के रूप में वर्गीकृत किया गया है। इनके लिए पूरा करने के लिए आपको "लेआउट" नामक एक फ़ोल्डर बनाने के लिए कहा जाता है (पहले से ही "सामान्य" के लिए मौजूद) और "drawable-hdpi"।

समस्या यह है कि यह एक ही वर्गीकरण के दो उपकरणों को अलग करने के लिए कुछ भी नहीं करता है, भले ही आप "डीपी" इकाइयों का उपयोग करें। आप WGA800 और WGA854 के लिए अलग-अलग लेआउट/ड्रॉबल्स कैसे प्रदान कर सकते हैं?

अनुपात पर्याप्त रूप से भिन्न हैं कि उपयोगकर्ता आसानी से खराब स्केलिंग को नोटिस करता है, और पृष्ठभूमि छवि के खिलाफ किसी विशेष स्थान पर स्कोर और टाइमर जैसी चीजों की आवश्यकता के कारण यह मेरी उत्तेजना से अधिक है।

वही समस्या जोड़े {WQVGA400 (240x400), WQVGA432 (240x432)} और {WVGA800 (480x800), WVGA854 (480x854)} पर लागू होती है। WQVA400 और WQGA432 के लिए आप लेआउट/ड्रॉबल्स कैसे प्रदान कर सकते हैं?

+0

शायद नहीं जवाब है कि आप देख रहे हैं, लेकिन आप स्क्रीन चौड़ाई और ऊंचाई प्राप्त कर सकते हैं और उसके बाद छवि का आकार या उचित स्थान पर स्कोर और टाइमर डाल सकते हैं। – Rajkiran

उत्तर

15

मुझे लगता है कि आप नरक की सड़क पर हैं।

एंड्रॉइड एक विशाल विविध प्रकार के उपकरणों पर चलता है, हर हफ्ते, और कई प्रारूप अभी तक मौजूद नहीं हैं लेकिन नए चर पेश करेंगे। तो यदि आप सफल होते हैं, तो एक अलग डिवाइस के साथ एक नया डिवाइस, और आपका ऐप असफल हो जाएगा।

विशिष्ट स्क्रीन संकल्पों का उपयोग करके एंड्रॉइड के लिए डिज़ाइन करना एक गलती है, और यदि आप सभी पृष्ठों को वेब पर सटीक आकार के समान करने के लिए मजबूर करते हैं, तो यह उन समस्याओं के समान है, यह शायद ही कभी अच्छी तरह से काम करता है (उदाहरण के लिए यहां तक ​​कि एक साफ निश्चित-चौड़ाई साइट मोबाइल उपकरणों पर दुर्भाग्य से विफल हो जाएगी)।

एंड्रॉइड को इन सभी भिन्नताओं का समर्थन करने के लिए डिज़ाइन किया गया है, लेकिन यदि आप प्रत्येक स्क्रीन आकार पर पिक्सेल-परिपूर्ण पूर्ण-स्थानांतरित प्रतिपादन प्राप्त करने का प्रयास करते हैं तो आप ज्वार के खिलाफ तैर रहे हैं। यह बहुत दर्दनाक, बहुत समय लेने वाला और महंगा होने की संभावना है, और अंत में असफल होने की संभावना है। यहां तक ​​कि यदि आप सफल होते हैं, तो आप इन सभी स्क्रीन वेरिएंट पर पृथ्वी पर कैसे परीक्षण करेंगे? यह भी नरक परीक्षण की तरह लगता है।

मैं आपको सलाह देता हूं कि आप स्वीकार करते हैं कि आप सबकुछ ठीक से नहीं कर सकते हैं जैसा कि आपको चाहिए, और इसके बजाय एक दूसरे के सापेक्ष वस्तुओं को प्रतिपादित करने के तरीकों का उपयोग कैसे करें, इसलिए ऐप सभी अलग-अलग विविधताओं में अच्छा दिखता है अलग-अलग आकार स्क्रीन पर अनुभव सुधारने के लिए प्रस्तावों के प्रत्येक समूह के लिए अलग-अलग लेआउट।

+2

उतना ही डर था। लेकिन मुझे चिल्लाया जाना चाहिए! – SK9

+0

एक अवलोकन - किसी दिए गए वर्गीकरण के सभी सदस्यों की चौड़ाई बराबर होती है। क्या इस तरह से रखने के इरादे का कोई बयान है? – SK9

+0

@ SK9 मुझे लगता है कि यह ग्रहण करने के लिए एंड्रॉयड लगभग किसी भी आकार, आकृति, उन्मुखीकरण के एक डिवाइस पर और किसी भी सुविधाओं वर्तमान या abesent (जीपीएस, नेटवर्क, कीबोर्ड आदि) और प्रदर्शन के साथ पालन अवधारणाओं प्रदान की है और उन्हें अनुकूलित के साथ चला सकते हैं सबसे अच्छा है - चित्र/भूमि, ldpi/mdpi/HDPI/xhdpi, स्क्रीन आकार आदि यह कम दर्दनाक आसान नहीं है, लेकिन लंबे समय में, और एक अच्छा मौका एप्लिकेशन बस अधिकांश उपकरणों –

2

इस पृष्ठ पर कहीं और उत्तर/टिप्पणियों के आगे, मैं अपने स्वयं के प्रश्न का एक और जवाब पोस्ट करना चाहता हूं जो स्क्रीन संसाधनों के प्रकार पर ध्यान आकर्षित कर रहा है। मुझे विश्वास नहीं है कि यह एंड्रॉइड दस्तावेज़ों में स्पष्ट है, लेकिन जहां तक ​​ड्रॉबल्स का संबंध है, आप डीपीआई टैग के शीर्ष पर खींचने योग्य फ़ाइलों में स्क्रीन आकार टैग जोड़ सकते हैं।

उदाहरण के लिए, drawable-large-mdpi नामक फ़ोल्डर जोड़ना मान्य है और बड़े स्क्रीन और मध्यम रिज़ॉल्यूशन वाले डिवाइस यहां से संसाधनों को खींचेंगे यदि वे कर सकते हैं। चेतावनी हालांकि, टैग मामलों के क्रम को स्विच करना: drawable-mdpi-large घोषित करना एक त्रुटि है।

5

हाँ, संभव है कि:

सबसे पहले आप प्रदर्शन-वर्ग का एक उदाहरण बनाने के लिए किया है। उसके बाद आप डिस्प्ले की चौड़ाई और हेगथ ​​प्राप्त करते हैं। फिर यदि आप ऑपरेटर का उपयोग कर और प्रत्येक इच्छित छवि को सेट करके प्रत्येक रिज़ॉल्यूशन को लूप में देख सकते हैं।

उदाहरण:

ImageView iview=(ImageView)findViewById(R.id.imageView1); 
//here are the Bitmaps optimized for each screen resolution 
Bitmap[] bitmaps={BitmapFactory.decodeResource(getResources(), R.drawable.icwvga800),BitmapFactory.decodeResource(getResources(), R.drawable.icwvga854),(...)}; 
// In this list all supported screensizes are defined 
int[][] possibleScreenSolutions={{480,800},{480,854},{240,400},{240,432},{480,800},{480,854}}; 
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 
int[] ScreenSolution={display.getWidth(),display.getHeight()}; 
// Compare the real screen solution with the all supported ones 
for(int i=0;i<possibleScreenSolutions.length;i++){ 
    if((ScreenSolution[0]==possibleScreenSolutions[i][0])&&(ScreenSolution[1]==possibleScreenSolutions[i][1])){ 
      iview.setImageBitmap(bitmaps[i]);// set the image 
    } 
} 

मैं ओली सी से सहमत: यह सभी प्रस्तावों की जांच करने के भी भ्रामक है, लेकिन यह कम से कम संभव है।

मैं इसे allready परीक्षण किया है: यह काम करता है।