Xml फ़ाइल से दृश्य को बढ़ाने का क्या मतलब है?


278

मैं Android विकास के लिए नया हूं और एक लेआउट xml फ़ाइल से विचारों को लुभाने के संदर्भ में आता रहता हूं। मैंने गुगली की और विकास मार्गदर्शिका की खोज की, लेकिन फिर भी इसका कोई मतलब नहीं निकाल सका। अगर कोई बहुत सरल उदाहरण प्रदान कर सकता है, तो उसे बहुत सराहना मिलेगी।

जवाबों:


257

जब आप XML लेआउट लिखते हैं, तो यह एंड्रॉइड ओएस द्वारा फुलाया जाएगा, जिसका मूल रूप से मतलब है कि यह मेमोरी में व्यू ऑब्जेक्ट बनाकर प्रदान किया जाएगा। आइए उस अंतर्निहित मुद्रास्फीति को कॉल करें (ओएस आपके लिए दृश्य को फुलाएगा)। उदाहरण के लिए:

class Name extends Activity{
    public void onCreate(){
         // the OS will inflate the your_layout.xml
         // file and use it for this activity
         setContentView(R.layout.your_layout);
    }
}

आप स्पष्ट रूप से विचारों का उपयोग करके फुला सकते हैं LayoutInflater। उस मामले में आपको निम्न करना होगा:

  1. का एक उदाहरण प्राप्त करें LayoutInflater
  2. XML को बढ़ाना निर्दिष्ट करें
  3. लौटे का उपयोग करें View
  4. सामग्री दृश्य के साथ सेट करें (ऊपर) देखें

उदाहरण के लिए:

LayoutInflater inflater = LayoutInflater.from(YourActivity.this); // 1
View theInflatedView = inflater.inflate(R.layout.your_layout, null); // 2 and 3
setContentView(theInflatedView) // 4

24
अगर भड़काना = प्रतिपादन करना, तो ऑनड्राइव (), का क्या उपयोग है?
PypeBros

@sylvainulg, R.id.view का उपयोग xml तत्व की विशेषताओं को बदलने के लिए किया जाता है और फुलाया जा सकता है। कस्टम दृश्यों में विशेष रूप से उपयोगी है। संपूर्ण xml फ़ाइल को फुलाए जाने के लिए, गतिविधि वर्ग के परिचित setContentView का उपयोग किया जाता है। एक दृश्य को प्रत्येक दृश्य को मैन्युअल रूप से LayoutInflater object.inflate () का उपयोग करके फुलाया जाना चाहिए। एक गतिविधि में एक जीवन चक्र होता है। इसके बजाय एक दृश्य में एक चक्र होता है। XML फ़ाइल में प्रेडिफ़ेंड लेआउट का उपयोग करने के बजाय कस्टम दृश्य के साथ इनफ़्लुएंट कण उपयोगी है।
श्री राम

@ क्रिसटन कृपया, क्या आपको लगता है कि आप मुझे यहाँ पर कुछ सलाह / विचार दे सकते हैं। go
eddy

24
मुझे नहीं लगता कि फुलाया जा रहा है बल्कि उकसाना है xml फ़ाइल सामग्री के आधार पर स्मृति में दृश्य वस्तु का वास्तविक निर्माण। फुलाए जाने के बाद दृश्य स्मृति में होगा जरूरी नहीं कि दृश्यमान हो।
अहमद

1
@MattJ। खैर, मेरा जवाब खराब हो सकता है। एंड्रॉयड जाएगा बढ़ सिर्फ एक्सएमएल कहीं होने से देखने के लिए, लेकिन जब आप setContentView फोन या मैन्युअल रूप से लेआउट बढ़ा देते हैं। जब तक आप कॉल findViewByIdकरते हैं तब तक ऑब्जेक्ट पहले से ही मेमोरी में होते हैं, और ऐसा करने का एकमात्र कारण उस विशेष ऑब्जेक्ट का संदर्भ प्राप्त करना है (या तो इसे बदलना है या इससे डेटा प्राप्त करना है)।
क्रिस्टियन

160

किसी दृश्य को "प्रदर्शित" करने का अर्थ है कि लेआउट XML को ले जाना और उसके भीतर निर्दिष्ट तत्वों और उनकी विशेषताओं से दृश्य और व्यूग्रुप ऑब्जेक्ट बनाने के लिए इसे पार्स करना और फिर उन विचारों और व्यूग्रुपों के पदानुक्रम को मूल व्यूग्रुप में जोड़ना। जब आप setContentView () कॉल करते हैं, तो यह XML को पढ़ने से लेकर गतिविधि तक बनाए जाने वाले विचारों को जोड़ देता है। आप किसी अन्य ViewGroup में दृश्य जोड़ने के लिए LayoutInflater का भी उपयोग कर सकते हैं, जो बहुत सारी परिस्थितियों में एक उपयोगी उपकरण हो सकता है।


22
यह मेरे लिए एक बहुत अधिक सटीक विवरण की तरह लगता है।
PypeBros

4
मैं अभी भी "मुद्रास्फीति" शब्दावली से थोड़ा भ्रमित हूं। (यदि मैं केवल कुछ में जाने वाली हवा को रोकना बंद कर सकता था)। लेकिन शायद यह मदद करेगा: मैंने सिर्फ उबंटू टर्मिनल पर अनज़िप कार्यक्रम चलाया और शब्दावली पर ध्यान दिया: "फुलाते हुए: X / Y / z.xml।" मुझे लगता है कि यह वास्तव में एक ही अवधारणा है।
बेन ओगोरक

6
इस मामले में "सूजन" का मतलब है कि फ्रेमवर्क एक्सएमएल से लेआउट विवरण ले रहा है और वास्तविक दृश्य वस्तुओं के साथ दृश्य पदानुक्रम को पॉप्युलेट कर रहा है। तो, यह लेआउट भरने के अर्थ में फुलाया जा रहा है।
जजब

1
@FranciscoCorrales - ज़रूर। आप जिस चीज के लिए इस तरह की चीज का उपयोग करेंगे, वह सबसे आम चीज है , लिस्ट एडेप्टर जैसी किसी चीज के लिए , जहां आप एक पंक्ति को आबाद करना चाहते हैं। मैंने इसे LinearLayouts जैसी चीजों को पॉप्युलेट करने के लिए इस्तेमाल किया है, कुछ डेटा ऑब्जेक्ट पर इस तरह से पुनरावृत्ति करना कि सूची एडेप्टर दृष्टिकोण का सुझाव नहीं दिया।
jjb

36

मुद्रास्फीति को रनटाइम पर गतिविधि में एक दृश्य (.xml) जोड़ने की प्रक्रिया है। जब हम एक सूची दृश्य बनाते हैं तो हम उसके प्रत्येक आइटम को गतिशील रूप से फुलाते हैं। यदि हम बटन और टेक्स्टव्यू जैसे कई दृश्यों के साथ एक व्यूग्रुप बनाना चाहते हैं, तो हम इसे इस तरह बना सकते हैं:

Button but = new Button();
but.setText ="button text";
but.background ...
but.leftDrawable.. and so on...

TextView txt = new TextView();
txt.setText ="button text";
txt.background ... and so on...

फिर हमें एक लेआउट बनाना होगा जहां हम उपरोक्त विचार जोड़ सकते हैं:

RelativeLayout rel = new RelativeLayout();

rel.addView(but);

और अब अगर हम दाएं कोने में एक बटन जोड़ना चाहते हैं और नीचे एक टेक्स्टव्यू है, तो हमें बहुत काम करना होगा। पहले देखने के गुणों को तुरंत और फिर कई बाधाओं को लागू करके। यह समय लेने वाला है।

एंड्रॉइड हमारे लिए एक सरल .xml बनाना आसान बनाता है और अपनी शैली और विशेषताओं को xml में डिज़ाइन करता है और फिर जहां कहीं भी हमें प्रोग्राम की स्थापना के दर्द के बिना इसकी आवश्यकता होती है, बस इसे फुलाते हैं।

LayoutInflater inflater = 
              (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View menuLayout = inflater.inflate(R.layout.your_menu_layout, mainLayout, true);
//now add menuLayout to wherever you want to add like

(RelativeLayout)findViewById(R.id.relative).addView(menuLayout);

मुझे पसंद है कि आपने वास्तव में मुद्रास्फीति को कैसे वर्णित किया है, यह दिखा कर कि आप इसे मैन्युअल रूप से कैसे करेंगे।
डैनियल

1
इम्पोर्ट के पैरामीटर से क्या तात्पर्य है?
flz

विस्तार से देखें जवाब stackoverflow.com/questions/12567578/…
ज़ार ई अहमर

5

मुझे लगता है कि यहां "एक दृश्य को फुलाया" का अर्थ है कि लेआउट को देखने के लिए। xml फ़ाइल उस xml फ़ाइल में निर्दिष्ट दृश्य को आकर्षित करती है और बनाए गए दृश्य के साथ मूल दृश्य समूह को पॉपुलेटिंग (= फुलाते) कर रही है।


4

मुद्रास्फीति की एक आम परिभाषा XML कोड को जावा कोड में बदलने के लिए हो सकती है। बस समझने का एक तरीका है, उदाहरण के लिए, अगर हमारे पास XML में टैग है, तो OS को मेमोरी में एक संगत जावा ऑब्जेक्ट बनाना पड़ता है, इसलिए इनवर्टर XMLtags पढ़ता है, और जावा में संबंधित ऑब्जेक्ट बनाता है।


2

क्योंकि हम यूआई को एक्सएमएल में बनाते हैं, लेकिन वस्तुओं को देखते हैं जो हम प्रदर्शित करते हैं इसलिए हमें किसी तरह से एक्सएमएल को वस्तुओं में परिवर्तित करने की आवश्यकता होती है इसलिए फुलाए जाने का मतलब है कि हम एक्सएमएल को वस्तुओं में बदल रहे हैं ताकि इसे प्रदर्शित किया जा सके, इसके लिए हमें एक सेवा की आवश्यकता है जिसे लेआउट इनोलेटर सेवा कहा जाता है। और इसे एक xml दें और यह आपके लिए परिवर्तित हो जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.