2012-08-14 12 views
16

मैं एंड्रॉइड विकास के लिए नया हूं और अपना यूआई बनाना शुरू कर दिया है। मुझे लगता है कि आप या तो यह गतिशील इस (Dynamic Layouts) की तरह कुछ बना सकते हैं:गतिशील बनाम एक्सएमएल लेआउट?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ScrollView sv = new ScrollView(this); 
    LinearLayout ll = new LinearLayout(this); 
    ll.setOrientation(LinearLayout.VERTICAL); 
    sv.addView(ll); 
    TextView tv = new TextView(this); 
    tv.setText("Name"); 
    ll.addView(tv); 
    EditText et = new EditText(this); 
    ll.addView(et); 
    Button b = new Button(this); 
    b.setText("Ok"); 
    ll.addView(b); 
} 

लेकिन मैं यह भी देखना NetBeans एक फ़ाइल संसाधन> लेआउट> main.xml है।

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello World, AndroidTest" 
    /> 
</LinearLayout> 

तो मेरे सवाल है जो मैं इस्तेमाल करना चाहिए: तो आप यूआई (Declaring XML layout) के लिए एक XML लेआउट बना सकते हैं? क्या अनुशंसा की जाती है और एंड्रॉइड विकास में गतिशील बनाम एक्सएमएल लेआउट के पेशेवर/विपक्ष क्या हैं?

उत्तर

25

लेआउट XML संसाधन फ़ाइलों का उपयोग करें।

सबसे पहले, संसाधन सेट (उदा। res/layout-land/res/layout/ के अलावा) आपको विभिन्न परिस्थितियों में उपयोग करने के लिए कई यूआई परिभाषित करने की अनुमति देता है, सिस्टम स्वचालित रूप से आवश्यकतानुसार सही चुनने के साथ। जावा में समतुल्य if या switch कथन का एक बुरा सेट होगा।

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

तीसरा, यह अधिक तेज़ हो जाता है, इसलिए यदि आप हाथ से यह सामान टाइप कर रहे हैं, तो एक्सएमएल कम टाइपिंग होगा।

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

+0

+1 धन्यवाद। एक्सएमएल तब है। मुझे एहसास था कि एंड्रॉइड साइट पर इसका अधिकांश कोड एक्सएमएल का उपयोग करता है। –

+5

इसके अलावा, जावा कोड में आपको यह देखने के लिए कोड को संकलित और चलाने के लिए है कि लेआउट कैसा दिखता है, जबकि एक्सएमएल में (यदि आप ग्रहण का उपयोग कर रहे हैं) तो आप इसे सीधे ग्रहण करने वाले टूल के साथ देख सकते हैं। –

3

मैं आपकी परियोजनाओं के अधिकांश हिस्सों के लिए एक्सएमएल लेआउट का उपयोग करने की सलाह दूंगा। आप भिन्न फ़ोल्डर में लेआउट जैसे रख सकते हैं:

लेआउट भूमि - परिदृश्य के लिए

लेआउट बंदरगाह> - चित्र के लिए

लेआउट-v15> - एंड्रॉयड संस्करण> = 15

के लिए>

लेआउट-sw600dp -> एक निश्चित चौड़ाई

साथ स्क्रीन इन संसाधन classifiers का उपयोग के लिए आप जल्दी से अपने लेआउट में एक विस्तृत विविधता android उपकरणों की व्यापक रेंज का समर्थन करने के कर सकते हैं बिना एक लो कोड करने के लिए है टी अतिरिक्त

मेरे विरोध में, यह सभी लेआउट गतिशील रूप से बनाम बनाम एक्सएमएल संसाधनों का उपयोग करने का सबसे बड़ा फायदा है। अधिक जानकारी के लिए this link about resources

+0

+1 अब मैं एक्सएमएल के साथ देखता हूं कम से कम यूआई असंगतताओं के बारे में कुछ चिंताएं मेरी पीठ से भी हटा दी जाएंगी –

1

ठीक है, मैं xml (99% समय) में एमयू यूआई घोषित करता हूं, क्योंकि मेरे लिए इस तरह काम करना आसान है।

यह अलग यूआई और कोड तर्क अच्छा व्यवहार है, एक्सएमएल यूआई वर्णन करने के लिए आसान है (this old designer उपयोग करने पर विचार या आईडीई ग्रहण करने के लिए स्विच और यह के डिजाइनर)

इसके अलावा, एक Android एप्लिकेशन अनेक डिज़ाइन (फोन और के लिए हो सकता है विशेष रूप से संपादित करने के लिए गोलियाँ) और यह हाथ से कोड है कि जावा

में

बस उपयोग एक्सएमएल

+0

+1 धन्यवाद .. तो एक्लिप्स के एंड्रॉइड के लिए एक विज़ुअल डिज़ाइनर है? –

+1

हां, यह ग्रहण के लिए एडीटी प्लगइन का हिस्सा है ..... [सहायता] (http://developer.android.com/sdk/installing/installing-adt.html) –

+0

एक्सएमएल का उपयोग यूआई और कोड तर्क अलग नहीं है । –

1

मैं एक्सएमएल सबसे बातों के लिए पसंद करते हैं, क्योंकि यह आपको कोड से सामग्री को अलग करने के लिए अनुमति देता है painfull हो जाएगा और यह आदत क्लीनर होने के लिए जब परियोजना बड़ी हो जाती है और आप कुछ समय पहले जो लिखा था उसे भूल जाते हैं। एक्सएमएल और शैलियों का उपयोग करने से आप पूरे ऐप में लगातार दिखने और महसूस करने की अनुमति देंगे। यह लेआउट सिस्टम को भारी उठाने की भी देखभाल करने की अनुमति देता है और आप उन विचारों के साथ समाप्त नहीं होंगे जिनके पास आपकी गतिविधि के संदर्भ का संदर्भ है। (जो खराब है, जब आप घूमते हैं और आपकी गतिविधि फिर से बनाई जाती है)। कुल मिलाकर यह एक त्वरित विकल्प होता है और यदि आप इसे एक्सएमएल में कर सकते हैं तो मुझे पसंद है। अधिकांश एंड्रॉइड आर्किटेक्चर/पाठ्यपुस्तक इस सेटअप का भी पालन करते हैं। (एंड्रॉइड देव डॉक्स देखें, कॉमन्सवेयर के मार्क मर्फी)

गतिशीलता के ऊपर यह है कि यह कुछ उन्नत तरीकों से कुछ चीजों को अनुकूलित करने में सक्षम है और कुछ लेआउट मुद्दों को आसानी से ठीक कर सकता है। इसके अलावा कुछ अपवाद हैं लेकिन मैं पहले एक्सएमएल में सबकुछ करना पसंद करता हूं और यदि यह नहीं किया जा सकता है या मुश्किल है तो इसे कोड में करें। एक्सएमएल में कुछ चीजें कोड के मुकाबले कहीं ज्यादा आसान हो सकती हैं।

1

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

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

+1 आपके इनपुट के लिए धन्यवाद –

2

XML पर आधारित लेआउट, कास्टिंग पर निर्भर करता है क्योंकि आप उपयोग करने के लिए:

Button myButton = (Button) findViewById(R.id.my_button); 

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

मैं तीसरा समाधान पसंद करता हूं - RoboGuice यह निर्भरता इंजेक्शन पैटर्न का उपयोग करता है और आपको कास्टिंग करने की परवाह नहीं है और यह ऐप बनाने के लिए तेज़ है। और भी लचीला। ध्यान दें कि आपके पास सामान्य टेक्स्ट फ़ील्ड है। फिर आप इसे टेक्स्ट एरिया में बदलना चाहते हैं। RoboGuice में यह केवल 2 परिवर्तनों का मामला है (उपयोग में परिवर्तन को छोड़कर)। जब आप संदर्भ का उपयोग करते हैं तो यह भी तेज़ होता है (संदर्भ बहुत स्मृति उपभोग करने वाला ऑब्जेक्ट है और इसका संदर्भ संग्रहीत करना खराब कोडिंग का संकेत है)।

तो मेरी सलाह है: यूआई का प्रबंधन करने के लिए इसकी सादगी के कारण एक्सएमएल का उपयोग करें। तेजी से कोड के लिए RoboGuice का उपयोग करें।

संबंधित मुद्दे