क्या कन्वेंशन हैं कि एंड्रॉइड में संसाधनों का नाम कैसे दिया जाए? उदाहरण के लिए, बटन, textViews, मेनू, आदि।
क्या कन्वेंशन हैं कि एंड्रॉइड में संसाधनों का नाम कैसे दिया जाए? उदाहरण के लिए, बटन, textViews, मेनू, आदि।
जवाबों:
मुझे नहीं पता कि क्या कोई आधिकारिक सिफारिशें हैं।
विगेट्स और कंटेनरों के साथ मेरे लेआउट में आईडी के लिए, मैं सम्मेलन का उपयोग करता हूं:
<layout>_<widget/container>_<name>
मैं किसी भी डिमन्स, स्ट्रिंग्स, नंबरों और उन लेआउट्स में उपयोग किए जाने वाले रंगों के लिए एक ही रणनीति करता हूं। हालाँकि, मैं सामान्य करने की कोशिश करता हूँ। उदाहरण के लिए, यदि सभी बटन में एक सामान्य टेक्स्ट-कॉर्नर है, तो मैं लेआउट के साथ नाम को उपसर्ग नहीं करूंगा। संसाधन का नाम 'button_textColor' होगा। यदि सभी टेक्स्टकॉलर्स एक ही संसाधन का उपयोग कर रहे हैं, तो इसे 'टेक्स्टकॉलर' नाम दिया जाएगा। स्टाइल्स के लिए, यह आमतौर पर मामला है।
मेनू संसाधनों के लिए मैं उपयोग करता हूं:
menu_<activity>_<name>
एनिमेशन केवल भिन्न हैं क्योंकि आप अपरकेस अक्षरों का उपयोग नहीं कर सकते हैं। मुझे लगता है कि xable संसाधनों के लिए भी काफी कुछ किया जा सकता है।
Android एसडीके शुरू करने के लिए एक अच्छी जगह होगी।
उदाहरण के लिए, मैं गतिविधि के भीतर आईडी को गुंजाइश देने की कोशिश करता हूं।
अगर मेरे पास ListView
होता तो बस @android:id/list
सभी गतिविधियों में होता।
यदि, हालांकि, मेरे पास दो सूचियाँ थीं तो मैं अधिक विशिष्ट @id/list_apple
और का उपयोग करूँगा@id/list_orange
तो जेनेरिक (आईडी, ...) का पुन: उपयोग किया जाता है R.java file
जबकि अद्वितीय वाले (कभी-कभी पुन: उपयोग किए जाते हैं) एक अंडरस्कोर द्वारा अलग किए गए जेनेरिक लोगों के साथ उपसर्ग करते हैं ।
अंडरस्कोर एक बात है, मैंने देखा, उदाहरण के लिए:
लेआउट चौड़ाई है layout_width
में एक्सएमएल और layoutWidth
में कोड , तो मैं के रूप में यह करने के लिए छड़ी करने की कोशिशlist_apple
तो एक लॉगिन बटन होगा login
, लेकिन अगर हमारे पास दो लॉगिन हैं तो login_foo
और login_bar
।
Android के प्रलेखन से लिया गया । विषय पर और भी बहुत कुछ है।
आपके प्रश्न का उत्तर देने के लिए: हां, हैं।
आप उदाहरण के लिए Google खोज के माध्यम से उनमें से कई पा सकते हैं । और सर्वश्रेष्ठ नामकरण सम्मेलन जैसी कोई चीज नहीं है। यह हमेशा आपकी आवश्यकताओं और आपकी परियोजना विशेषताओं (सबसे महत्वपूर्ण रूप से गुंजाइश) पर निर्भर करता है।
हाल ही में, मैंने Jeroen Mols से Android XML में संसाधनों के नामकरण के बारे में काफी अच्छा ब्लॉग पोस्ट पढ़ा है । लेखक मूल सिद्धांत का उल्लेख करता है कि सभी संसाधनों का पालन करना चाहिए और फिर यह कन्वेंशन प्रत्येक संसाधन प्रकार पर कैसे लागू किया जाता है। दोनों ने एंड्रॉइड संसाधन पर धोखा देने वाली नामकरण का वर्णन किया :
वह तब प्रत्येक तत्व और प्रत्येक संसाधन प्रकार का विस्तार से वर्णन करता है।
मैं कहूंगा कि आप इस सम्मेलन का उपयोग छोटे से मध्यम परियोजनाओं (व्यक्तिगत उपयोग, कुछ महीनों के अनुबंध के आवेदन) से कर सकते हैं। हालाँकि, मैं इसे 50+ गतिविधियों या 1000+ स्ट्रिंग्स जैसे लंबे समय के प्रोजेक्ट्स के लिए अनुशंसित नहीं करूँगा।
इतने बड़े पैमाने की परियोजनाओं में संसाधन मूल्यों के लिए कन्वेंशनों के लिए अधिक जांच की आवश्यकता है कि उनका उपयोग कैसे किया जाएगा। उदाहरण के लिए तार लें। आपकी टीम के आकार, आपके द्वारा उपयोग किए जा रहे अनुवाद केंद्र (यदि कोई हो), वीसीएस से प्रभावित हो सकते हैं जिसे आप उपयोग कर रहे हैं (उदाहरण के लिए मर्ज संघर्ष से बचने के लिए), आदि । आप कई फाइलों में तार बंटने के बारे में भी सोच सकते हैं।
मुझे लगता है कि आप कुछ शुरू करने के लिए देख रहे हैं। इसलिए मैं आपके द्वारा उल्लिखित ब्लॉग पोस्ट की सिफारिश करूंगा। यह शुरुआत के लिए अच्छा है और आप निश्चित रूप से इसे अपने स्वयं के अच्छे नामकरण सम्मेलनों को बनाने के लिए प्रेरणा के रूप में उपयोग कर सकते हैं।
यह भी ध्यान रखें कि जैसे-जैसे एक परियोजना बढ़ती है, कई जरूरतें और आवश्यकताएं समय में बदल सकती हैं। तो इसकी पूरी तरह से सामान्य है कि नामकरण परंपराएं जो शुरुआत में उपयुक्त थीं, 2 साल बाद उपयुक्त नहीं होंगी। और यह पूरी तरह से ठीक है। आपको भविष्य की भविष्यवाणी करने की कोशिश नहीं करनी चाहिए। बस एक सम्मेलन चुनें और उसका पालन करें। आप पाएंगे कि क्या यह आपके और आपकी परियोजना के लिए उपयुक्त है। यदि इसकी नहीं, तो इस बारे में सोचें कि यह उपयुक्त क्यों नहीं है और कुछ और का उपयोग करना शुरू करें।
संसाधनों में उपयोग किए जाने वाले कुछ सम्मेलन हैं:
इस "लेआउट_ब्ला" सम्मेलन का उपयोग कुछ अन्य स्थानों पर भी किया गया है। उदाहरण के लिए, "State_blah" विशेषताएँ हैं, जो एक देखने योग्य राज्य हैं जो एक दृश्य हो सकती हैं।
इन दो सम्मेलनों (फाइलों के लिए अंडरस्कोर_सेप्टर, घोषित संसाधनों के लिए मिश्रित) के कारण, आपको कई असंगतताएँ मिलेंगी। उदाहरण के लिए रंगों को फाइलों के साथ या स्पष्ट मूल्यों के रूप में घोषित किया जा सकता है। आमतौर पर हम उन सभी के लिए अंडरस्कोर_सेप्ट के साथ रहना पसंद करते हैं, लेकिन यह हमेशा नहीं होता है।
अंततः हम संसाधनों के लिए सम्मेलनों के नामकरण के बारे में पूरी चिंता नहीं करते हैं। बड़ा जिसे हम लगातार रखते हैं वह विशेषताओं के लिए "मिश्रितकैस" है, और लेआउट परम विशेषताओं की पहचान करने के लिए "लेआउट_ब्ला" का उपयोग।
साथ ही सार्वजनिक संसाधनों के माध्यम से ब्राउज़ करना सम्मेलनों के लिए एक अच्छा एहसास देना चाहिए:
http://developer.android.com/reference/android/R.html
आप देखेंगे कि सभी विशेषताएँ काफी सुसंगत हैं (आपको लेआउट_ सम्मेलन समझ में आता है), ड्रॉबल सभी अंडरस्कोर_सेपोरेटेड हैं, आदि।
यह किसी भी भाषा या ढांचे के लिए एक आम समस्या है, लेकिन जब तक आप आरक्षित शब्दों से बचते हैं, तो आपको ठीक होना चाहिए यह मानकर कि आप याद रख सकते हैं कि आपने किन चीजों को बुलाया है।
मैंने ध्यान दिया कि एंड्रॉइड xml संसाधन फ़ाइल नामों पर प्रतिबंध लगाता है लेकिन अंडरस्कोर ठीक लगता है। ADT वास्तव में बताता है
फ़ाइल-आधारित संसाधन नामों में केवल लोअरकेस, 0-9, या _ होना चाहिए।
कुछ ऐसा है जो मुझे पहली बार में परेशान करता है, आईडी के साथ नामस्थानों की कमी थी, लेकिन इसे आमतौर पर अनदेखा किया जा सकता है यदि आपके पास दो आईडी हैं, तो एंड्रॉइड केवल परिभाषित आईडी का पुन: उपयोग करेगा।
आईडी के लिए मैं एक 3 अक्षर वाले क्वालीफायर का उपयोग करता हूं, जिसके बाद यह ऊंट संकेतन में संदर्भित होता है उदा। एक स्थिर टेक्स्ट लेबल (या टेक्स्टव्यू) के लिए lblFoo, एक संपादन योग्य टेक्स्टबॉक्स के लिए txtFoo (एंड्रॉइड में edittext)। यह पहली बार में अजीब लग सकता है लेकिन मैं इसे VB6 के बाद से इस्तेमाल कर रहा हूं और उन नियंत्रणों को लेबल और टेक्स्टबॉक्स कहा जाता है।
यहाँ कुछ और हैं जिनका मैं आमतौर पर उपयोग करता हूँ:
मैं जावा फाइल के भीतर कोड में भी उसी का उपयोग करता हूं, इसलिए मुझे इसके बारे में सोचने की ज़रूरत नहीं है, पैकेज गुंजाइश यह काफी खुशी की अनुमति देगा:
Button btnFoo = (Button)findViewById(R.id.btnFoo);
यदि आप अंडरस्कोर यानी btn_foo का उपयोग करके थोड़ी सी रिक्ति जोड़ना पसंद करते हैं ... मैं शायद ऐसा कर सकता हूं यदि मैं अन्य आदतों को तोड़ सकता हूं।
ऐसे लोग हैं जो तर्क दे सकते हैं कि यह आदर्श नहीं हो सकता है और शुद्धतावादियों का तर्क होगा कि पूर्ण नाम का उपयोग किया जाना चाहिए, लेकिन जब आप दर्जनों नियंत्रणों का नामकरण कर रहे हैं और विभिन्न प्रणालियों और रूपरेखाओं के बीच बदल रहे हैं, तो पूर्ण नाम अपने अर्थ खो देते हैं, मैं VB, C ++, ASP.NET, WinForms in C # और VB.NET, Android और Python में एक दशक से अधिक समय तक इनका उपयोग किया है। मुझे यह याद रखने की आवश्यकता नहीं है कि क्या एंड्रॉइड इसे एक टेक्स्टबॉक्स या एक एडिटेक्स कहता है। मुझे बस इतना पता होना चाहिए कि lblFoo स्टैटिक लेबल है और txtFoo वह है जो उपयोगकर्ता टाइप इनपुट में है।
एक अंतिम नोट यह है कि महत्वपूर्ण बातों पर आप जो भी निर्णय लेते हैं, वह ठीक से और लगातार नामकरण को नियंत्रित करता है, ताकि आप अस्पष्ट डिफ़ॉल्ट आईडी के साथ कुश्ती न करें जैसे कि TextView5 या विभिन्न सम्मेलनों का मिश्रण
मुझे नहीं लगता कि Google द्वारा प्रचारित कोई मानक सम्मेलन है। मैंने सभी प्रकार के अलग-अलग तरीकों से लोगों को सामान का नाम देते हुए देखा है, यहां तक कि अलग-अलग आधिकारिक Google ऐप में भी।
एक निर्देशिका पदानुक्रम में 100 लेआउट (या ड्रॉबल, मेनू, आदि) फ़ाइलों की समझ बनाने की कोशिश करते समय जो कुछ भी आपको सबसे अधिक मदद करता है।
एक संक्षिप्त उत्तर: यदि आप Android डेवलपर्स से सीखना चाहते हैं, तो एक अच्छा उदाहरण समर्थन पुस्तकालय v7 ( https://dl-ssl.google.com/android/repository/support_r21.zip है। )
अन्यथा, यहां मैंने संसाधनों के नामकरण के लिए क्या विचार किया है:
1. कोड लिखते समय आसानी से संसाधन ढूंढना
2. कोड को पढ़ते समय आसानी से संसाधनों को समझना
3. अनुवादकों के लिए नाम उपयोगी बनाना ( R.string.*
केवल संसाधन)
4. के साथ पुन: उपयोग करना लेआउट <include/>
( R.id.*
संसाधन संघर्ष)
। पुस्तकालय परियोजनाओं के साथ
तार्किक रूप से, संसाधनों को व्यवस्थित करना जावा कक्षाओं को संकुल में समूहित करने से अलग नहीं होना चाहिए (या फ़ाइलों को फ़ोल्डर में रखना)। हालांकि, बाद से एंड्रॉयड संसाधनों कोई नामस्थान है, उपसर्गों संसाधन नाम जोड़ा जाना चाहिए एक ही प्राप्त करने के लिए (उदाहरण के लिए com.example.myapp.photo
हो जाता है com_example_myapp_photo
)।
मैं एप्लिकेशन को अलग-अलग घटकों (गतिविधियों, टुकड़े, संवाद, आदि) में विभाजित करने का सुझाव देता हूं, जो छोटे अनूठे नाम हैं जिन्हें संसाधन उपसर्ग के रूप में उपयोग किया जा सकता है। इस तरह से हम संबंधित कार्यक्षमता के साथ संसाधनों को एक साथ जोड़ रहे हैं, जिससे उन्हें (बिंदु 1) खोजने में आसानी होती है और हम एक ही समय में दोनों <include/>
और पुस्तकालय परियोजनाओं (अंक 4 और 5) के साथ संघर्ष का नाम लेने से बचते हैं । ध्यान दें कि कई घटकों के लिए सामान्य संसाधन अभी भी एक उपसर्ग (जैसे R.string.myapp_ok_button
) हो सकते हैं।
उपसर्ग के बाद, नाम को हमें यह बताना चाहिए कि संसाधन का उपयोग किस लिए किया जाता है (प्रदर्शन किए जाने की क्रिया, प्रदर्शित की जाने वाली सामग्री आदि)। एक अच्छा नाम चुनना समझ के लिए महत्वपूर्ण है (अंक 2 और 3)।
कभी-कभी "कंपोनेंट_नाम" हमें पर्याप्त जानकारी देगा, जो विशेष रूप से सच है यदि प्रकार पहले से ही आर क्लास ( R.string.myapp_name_string
2 वें "स्ट्रिंग" में बेमानी है) द्वारा दिया गया है । हालांकि, स्पष्ट रूप से जोड़ने से समझ में सुधार हो सकता है (उदाहरण के लिए, यह अनुवादकों के लिए टोस्ट या लेबल के बीच अंतर करने में मददगार हो सकता है)। कभी-कभी "नाम" और "प्रकार" भागों को टाइप-आधारित फ़िल्टरिंग की अनुमति देने के लिए स्वैप किया जा सकता है (R.string.photo_menu_*
यह हमें फोटो घटक के लिए केवल मेनू से संबंधित आइटम देगा)।
मान लीजिए कि हम चित्र लेने के लिए एक गतिविधि लिख रहे हैं, वर्ग com.example.myapp.photo .PhotoActivity। हमारे संसाधन इस तरह दिख सकते हैं (घटक "फोटो" द्वारा वर्गीकृत):
R.layout.photo //if only a single layout is used
R.menu.photo
R.string.photo_capture_instructions_label
R.id.photo_capture_instructions_label
R.id.photo_capture_button
R.id.photo_capture_image
R.drawable.photo_capture_placeholder
R.dimen.photo_capture_image_height
यदि आप एंड्रॉइड के प्रलेखन में चारों ओर प्रहार करते हैं, तो "सर्वोत्तम प्रथाओं" के विभिन्न उल्लेख हैं, लेकिन निश्चित रूप से कोई ठोस नियम नहीं हैं। उदाहरण के लिए, आइकन डिजाइन दिशानिर्देशों में , Google एक "ic_" उपसर्ग के साथ नामकरण आइकनों का सुझाव देता है।
शुरू करने के लिए एक अच्छी जगह संसाधन उपलब्ध कराना हो सकता है ।
एसडीके स्रोत / उदाहरणों के साथ-साथ एंड्रॉइड डेवलपर्स ब्लॉग पर भी खुदाई करें यदि आप यह देखना चाहते हैं कि Google डेवलपर्स कैसे चीजें करते हैं।
मुझे स्ट्रिंग्स के लिए अगले नामकरण सम्मेलन में काम मिला:
[<action>]_<object>_<purpose>
उदाहरण के लिए, clear_playlist_text, delete_song_message, update_playlist_positivebutton_text। और "कार्रवाई" यहां वैकल्पिक है।
आप यहां अंदाजा लगाने के लिए कोड स्टाइल के लिए गूगल डॉक्यूमेंटेशन पढ़ सकते हैं
मैंने आम तौर पर संसाधन आईडी (फ़ाइलों के लिए फ़ाइलों के लिए नहीं) के लिए जावा नामकरण सम्मेलनों का पालन किया, इसके अलावा मैंने उदाहरण के लिए आईडी के सामने "x" जोड़ा:
<TextView android:id="@+id/xTvName" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
जावा में हम इसे सरल उपयोग कर सकते हैं (हम साधारण को भी याद कर सकते हैं)
TextView mTvName=(TextView)findViewById(R.id.xTvName);
यहाँ mTvName (यह सामान्य रूप से एंड्रॉइड सुझाए गए नामकरण का सुझाव दिया गया है) और xTvName जिसे लेआउट फ़ाइल में Android TextView की Id (XML के लिए x) के भाग के रूप में नामित किया गया था, मैंने इस प्रकार के नामकरण सम्मेलनों को देखने के लिए ऑब्जेक्ट्स जैसे Buttons और EditText आदि का अनुसरण किया।
XML IDS में: xViewTypeSpecificName
जावा में: mViewTypeSpeficName
जब मैं जटिल लेआउट बनाता हूं तो उपरोक्त सम्मेलनों से मेरा जीवन आसान हो जाता है। बस अपने नाम को जितना संभव हो उतना कम लंबाई में बनाने की कोशिश करें और यह बेहतर है अगर वे अन्य सह-डेवलपर्स के लिए समझने योग्य और सार्थक हैं (लेकिन यह हर बार संभव नहीं हो सकता है), आशा है कि मेरा अनुभव दूसरों की मदद करेगा, सुझावों का स्वागत है।
हमारी एंड्रॉइड परियोजनाओं में बटन, लेबल, टेक्स्टबॉक्स जैसे बहुत सारे घटक हैं। उदाहरण के लिए इतना आसान नाम "नाम" यह "नाम" की पहचान करने के लिए बहुत भ्रामक है लेबल या टेक्स्टबॉक्स। मुख्य रूप से ऐसा तब होता है जब आप कुछ अन्य डेवलपर्स द्वारा विकसित परियोजनाओं को बनाए रख रहे होते हैं।
इसलिए इस तरह के भ्रम से बचने के लिए मैंने बटन टेक्स्टबॉक्स या लेबल के लिए निम्नलिखित नामों का इस्तेमाल किया
उदाहरण :
btnName
labName
txtName
listName
हो सकता है कि यह आपके लिए मददगार हो।
कुछ प्रतिबंध हैं:
वैसे, दिशानिर्देशों का पालन करना या मानक कोड से सीखना अधिक उचित है।