มีหลักการในการตั้งชื่อทรัพยากรใน Android หรือไม่ ตัวอย่างเช่นปุ่ม textViews เมนู ฯลฯ
มีหลักการในการตั้งชื่อทรัพยากรใน Android หรือไม่ ตัวอย่างเช่นปุ่ม textViews เมนู ฯลฯ
คำตอบ:
ฉันไม่รู้ว่ามีคำแนะนำอย่างเป็นทางการหรือไม่
สำหรับรหัสในเลย์เอาต์ของฉันที่มีวิดเจ็ตและคอนเทนเนอร์ฉันใช้หลักการ:
<layout>_<widget/container>_<name>
ฉันใช้กลยุทธ์เดียวกันกับการหรี่สตริงตัวเลขและสีที่ฉันใช้ในเค้าโครงเหล่านั้น อย่างไรก็ตามฉันลองพูดคุยทั่วไป เช่นถ้าปุ่มทั้งหมดมี textColor ทั่วไปฉันจะไม่นำหน้าชื่อด้วยเค้าโครง ชื่อทรัพยากรจะเป็น "button_textColor" หาก textColors ทั้งหมดใช้ทรัพยากรเดียวกันทรัพยากรจะถูกตั้งชื่อว่า 'textColor' สำหรับสไตล์มักจะเป็นเช่นนั้นเช่นกัน
สำหรับทรัพยากรเมนูที่ฉันใช้:
menu_<activity>_<name>
ภาพเคลื่อนไหวจะแตกต่างกันเนื่องจากคุณไม่สามารถใช้ตัวอักษรตัวพิมพ์ใหญ่ได้ เช่นเดียวกันกับทรัพยากร xml ที่วาดได้ฉันเชื่อ
Android SDK จะเป็นจุดเริ่มต้นที่ดี
ตัวอย่างเช่นฉันพยายามกำหนดขอบเขต ID ภายในกิจกรรม
ถ้าฉันมีListView
มันก็จะอยู่@android:id/list
ในกิจกรรมทั้งหมด
อย่างไรก็ตามหากฉันมีสองรายการฉันจะใช้รายการที่เฉพาะเจาะจงมากขึ้น@id/list_apple
และ@id/list_orange
ดังนั้นทั่วไป (IDS, ... ) ได้รับนำกลับมาใช้ในR.java file
ขณะที่คนที่ไม่ซ้ำกัน (บางครั้งได้รับกลับมาใช้ใหม่) ได้รับนำหน้ากับคนทั่วไปแยกจากกันโดยการขีดเส้นใต้
ขีดล่างเป็นสิ่งหนึ่งที่ฉันสังเกตเห็นเช่น:
เค้าโครงความกว้างlayout_width
ในXMLและlayoutWidth
ในรหัสดังนั้นฉันพยายามที่จะติดเป็นlist_apple
ดังนั้นปุ่มเข้าสู่ระบบจะมีlogin
แต่ถ้าเรามีสองการเข้าสู่ระบบแล้วและlogin_foo
login_bar
ที่นำมาจากเอกสารของ Android มีมากขึ้นในเรื่องนี้
เพื่อตอบคำถามของคุณ: ใช่มี
คุณสามารถค้นหาได้จากการค้นหาของGoogleเช่น และไม่มีสิ่งที่เรียกว่าหลักการตั้งชื่อที่ดีที่สุด ขึ้นอยู่กับความต้องการและคุณลักษณะโครงการของคุณเสมอ (ที่สำคัญที่สุดคือขอบเขต)
เมื่อเร็ว ๆ นี้ฉันได้อ่านบล็อกโพสต์ที่ค่อนข้างดีเกี่ยวกับการตั้งชื่อทรัพยากรใน Android XML จาก Jeroen Mols ผู้เขียนกล่าวถึงหลักการพื้นฐานที่ทรัพยากรทั้งหมดควรปฏิบัติตามและวิธีการที่อนุสัญญานี้ใช้กับทรัพยากรแต่ละประเภท ทั้งที่อธิบายในAndroid ทรัพยากรการตั้งชื่อแผ่นโกง :
จากนั้นเขาจะอธิบายแต่ละองค์ประกอบและทรัพยากรแต่ละประเภทโดยละเอียด
ฉันจะบอกว่าคุณสามารถใช้การประชุมนี้ตั้งแต่โครงการขนาดเล็กถึงขนาดกลาง (การใช้งานส่วนตัวการใช้งานตามสัญญาไม่กี่เดือน) แม้ว่าฉันจะไม่แนะนำให้ทำโปรเจ็กต์เป็นเวลานานที่มีกิจกรรมมากกว่า 50 รายการหรือมากกว่า 1,000 สตริง
การประชุมเกี่ยวกับมูลค่าทรัพยากรในโครงการขนาดใหญ่ดังกล่าวจำเป็นต้องมีการตรวจสอบเพิ่มเติมว่าจะนำไปใช้อย่างไร ยกตัวอย่างเช่น อาจได้รับผลกระทบจากขนาดของทีมศูนย์การแปลที่คุณใช้ (ถ้ามี) VCS ที่คุณใช้ (เพื่อหลีกเลี่ยงความขัดแย้งในการรวม) ฯลฯ คุณอาจคิดเกี่ยวกับการแยกสตริงออกเป็นหลายไฟล์
ฉันคิดว่าคุณกำลังมองหาสิ่งที่จะเริ่มต้นด้วย ดังนั้นฉันขอแนะนำบล็อกโพสต์ที่ฉันกล่าวถึง เป็นสิ่งที่ดีสำหรับผู้เริ่มต้นและคุณสามารถใช้เป็นแรงบันดาลใจในการสร้างรูปแบบการตั้งชื่อที่ดีของคุณเองได้อย่างแน่นอน
นอกจากนี้โปรดทราบว่าเมื่อโครงการเติบโตขึ้นความต้องการและข้อกำหนดหลายอย่างอาจเปลี่ยนแปลงไปตามกาลเวลา ดังนั้นจึงเป็นเรื่องปกติอย่างยิ่งที่หลักการตั้งชื่อที่เหมาะสมในช่วงแรกจะไม่เหมาะสมหลังจากผ่านไป 2 ปี และก็เรียบร้อยดี คุณไม่ควรพยายามทำนายอนาคต เพียงแค่เลือกรูปแบบและปฏิบัติตามนั้น คุณจะพบว่าเหมาะสำหรับคุณและโครงการของคุณหรือไม่ หากไม่เป็นเช่นนั้นให้คิดว่าเหตุใดจึงไม่เหมาะสมและเริ่มใช้อย่างอื่น
มีอนุสัญญาบางประการที่ใช้ในทรัพยากร:
การประชุม "layout_blah" นี้ยังถูกนำไปใช้ในที่อื่น ๆ อีกสองสามแห่ง ตัวอย่างเช่นมีแอตทริบิวต์ "state_blah" ซึ่งเป็นสถานะที่วาดได้ที่มุมมองสามารถมีได้
เนื่องจากอนุสัญญาทั้งสองนี้ (underscore_separated for files, mixedCase สำหรับทรัพยากรที่ประกาศไว้) คุณจะพบความไม่สอดคล้องกันจำนวนหนึ่ง ตัวอย่างเช่นสีสามารถประกาศด้วยไฟล์หรือเป็นค่าที่ชัดเจนก็ได้ โดยทั่วไปเราต้องการใช้ underscore_separated สำหรับสิ่งเหล่านี้ทั้งหมด แต่ก็ไม่ได้เกิดขึ้นเสมอไป
ท้ายที่สุดแล้วเราไม่ต้องกังวลมากนักเกี่ยวกับการตั้งชื่อสำหรับแหล่งข้อมูล สิ่งสำคัญที่เราทำให้สอดคล้องกันคือ "mixedCase" สำหรับแอตทริบิวต์และการใช้ "layout_blah" เพื่อระบุแอตทริบิวต์พารามิเตอร์ของโครงร่าง
การเรียกดูแหล่งข้อมูลสาธารณะที่นี่ควรให้ความรู้สึกที่ดีสำหรับการประชุม:
http://developer.android.com/reference/android/R.html
คุณจะเห็นว่าแอตทริบิวต์ทั้งหมดค่อนข้างสอดคล้องกัน (หากคุณเข้าใจรูปแบบการจัดวาง _) drawables ทั้งหมด underscore_separated ฯลฯ
นี่เป็นปัญหาทั่วไปสำหรับภาษาหรือกรอบงานใด ๆ แต่ตราบใดที่คุณหลีกเลี่ยงคำสงวนคุณก็ควรจะโอเคโดยสมมติว่าคุณจำสิ่งที่คุณเรียกว่าสิ่งต่างๆได้
ฉันทราบว่า Android วางการเรียกคืนชื่อไฟล์ทรัพยากร xml แต่ขีดล่างดูเหมือนจะโอเค ADT ระบุจริง
ชื่อทรัพยากรตามไฟล์ต้องมีตัวพิมพ์เล็ก az, 0-9 หรือ _ เท่านั้น
สิ่งที่ทำให้ฉันสะดุดในตอนแรกคือไม่มีเนมสเปซที่มี id แต่โดยทั่วไปแล้วสิ่งนี้สามารถเพิกเฉยได้หากคุณมี id สองตัว Android เดียวกันจะนำ id ที่กำหนดมาใช้ซ้ำ
สำหรับ id ฉันใช้ตัวระบุ 3 ตัวอักษรตามด้วยสิ่งที่หมายถึงในสัญกรณ์อูฐเช่น lblFoo สำหรับป้ายข้อความแบบคงที่ (หรือ textview), txtFoo สำหรับกล่องข้อความที่แก้ไขได้ (แก้ไขข้อความใน Android) ตอนแรกอาจดูแปลก ๆ แต่ฉันใช้มาตั้งแต่ VB6 และตัวควบคุมเหล่านั้นเรียกว่าป้ายกำกับและกล่องข้อความ
นี่คือบางส่วนเพิ่มเติมที่ฉันมักใช้:
ฉันใช้รหัสเดียวกันในไฟล์ java ด้วยดังนั้นฉันจึงไม่ต้องคิดถึงมันขอบเขตของแพ็คเกจจะช่วยให้สิ่งนี้ค่อนข้างมีความสุข:
Button btnFoo = (Button)findViewById(R.id.btnFoo);
คุณสามารถทำได้ถ้าคุณต้องการเพิ่มระยะห่างเล็กน้อยโดยใช้ขีดล่างเช่น btn_foo ... ฉันอาจจะทำเช่นนี้ถ้าฉันสามารถทำลายนิสัยเดิมได้
มีผู้ที่อาจโต้แย้งว่าการย่อสิ่งเหล่านี้อาจไม่เหมาะและคนเจ้าระเบียบจะโต้แย้งว่าควรใช้ชื่อเต็ม แต่เมื่อคุณตั้งชื่อการควบคุมหลายสิบรายการและเปลี่ยนระหว่างระบบและกรอบงานที่แตกต่างกันชื่อเต็มจะสูญเสียความหมายฉัน ใช้สิ่งเหล่านี้มานานกว่าทศวรรษใน VB, C ++, ASP.NET, WinForms ใน C # และ VB.NET, Android และ Python ฉันไม่จำเป็นต้องจำว่า Android เรียกมันว่ากล่องข้อความหรือข้อความแก้ไข สิ่งที่ฉันต้องรู้ก็คือ 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.*
ความขัดแย้งของทรัพยากร)
5. การจัดการ กับโครงการห้องสมุด
ตามเหตุผลแล้วการจัดเรียงทรัพยากรไม่ควรแตกต่างจากการจัดกลุ่มคลาส java เป็นแพ็กเกจ (หรือใส่ไฟล์ลงในโฟลเดอร์) อย่างไรก็ตามเนื่องจากทรัพยากรของ Android ไม่มีเนมสเปซจึงต้องเพิ่มคำนำหน้าในชื่อทรัพยากรเพื่อให้ได้ชื่อเดียวกัน (เช่นcom.example.myapp.photo
กลายเป็นcom_example_myapp_photo
)
ฉันขอแนะนำให้แบ่งแอปออกเป็นส่วนประกอบแยกกัน (กิจกรรมชิ้นส่วนกล่องโต้ตอบ ฯลฯ ) ด้วยชื่อเฉพาะสั้น ๆ ที่สามารถใช้เป็นคำนำหน้าทรัพยากรได้ ด้วยวิธีนี้เราจะจัดกลุ่มทรัพยากรที่มีฟังก์ชันการทำงานที่เกี่ยวข้องเข้าด้วยกันซึ่งทำให้ค้นหาได้ง่าย (จุดที่ 1) และในขณะเดียวกันเราก็หลีกเลี่ยงความขัดแย้งในการตั้งชื่อกับทั้งสอง<include/>
โครงการและไลบรารี (จุดที่ 4 และ 5) โปรดทราบว่ารีซอร์สที่ใช้ร่วมกันกับหลายคอมโพเนนต์ยังคงมีคำนำหน้า (เช่นR.string.myapp_ok_button
)
หลังจากคำนำหน้าชื่อควรบอกเราว่าทรัพยากรนั้นใช้สำหรับอะไร (การดำเนินการที่จะดำเนินการเนื้อหาที่จะแสดง ฯลฯ ) การเลือกชื่อที่ดีเป็นสิ่งสำคัญสำหรับความเข้าใจ (ข้อ 2 และ 3)
บางครั้ง "component_name" จะให้ข้อมูลที่เพียงพอแก่เราซึ่งโดยเฉพาะอย่างยิ่งถ้าประเภทนั้นกำหนดโดยคลาส R (ใน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
หากคุณสำรวจในเอกสารของ Android จะมีการกล่าวถึง "แนวทางปฏิบัติที่ดีที่สุด" หลายข้อ แต่ไม่มีกฎเกณฑ์ที่เป็นรูปธรรมอย่างแน่นอน ตัวอย่างเช่นในหลักเกณฑ์การออกแบบไอคอน Google แนะนำการตั้งชื่อไอคอนที่มีคำนำหน้า "ic_"
สถานที่ที่ดีที่จะเริ่มต้นอาจจะจัดหาทรัพยากร
สำรวจแหล่งที่มา / ตัวอย่าง SDK เช่นเดียวกับในบล็อกนักพัฒนา Androidหากคุณต้องการดูว่านักพัฒนาของ Google ทำสิ่งต่างๆอย่างไร
ฉันพบหลักการตั้งชื่อต่อไปที่มีประโยชน์สำหรับสตริง:
[<action>]_<object>_<purpose>
ตัวอย่างเช่น clear_playlist_text, delete_song_message, update_playlist_positivebutton_text และ "การกระทำ" ที่นี่เป็นทางเลือก
โดยทั่วไปฉันปฏิบัติตามหลักการตั้งชื่อ java สำหรับรหัสทรัพยากร (ไม่ใช่สำหรับไฟล์สำหรับไฟล์) ยกเว้นฉันเพิ่ม "x" ไว้ข้างหน้ารหัสเช่น:
<TextView android:id="@+id/xTvName" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
ใน java เราสามารถใช้มันง่าย ๆ (เราสามารถจำง่ายๆได้ด้วย)
TextView mTvName=(TextView)findViewById(R.id.xTvName);
ที่นี่ mTvName (เป็นรูปแบบการตั้งชื่อที่แนะนำโดยทั่วไปของ Android) และ xTvName ซึ่งได้รับการตั้งชื่อในไฟล์เลย์เอาต์ซึ่งเป็นส่วนหนึ่งของ Id ของ Android TextView (x หมายถึง XML) ฉันใช้รูปแบบการตั้งชื่อประเภทนี้เพื่อดูวัตถุเช่นปุ่มและ EditText เป็นต้น
ใน XML IDS: xViewTypeSpecificName
ใน Java: mViewTypeSpeficName
อนุสัญญาข้างต้นทำให้ชีวิตของฉันง่ายขึ้นเมื่อฉันสร้างเค้าโครงที่ซับซ้อน เพียงพยายามตั้งชื่อของคุณให้สั้นที่สุดเท่าที่จะทำได้และจะดีกว่าถ้าพวกเขาเข้าใจและมีความหมายกับผู้ร่วมพัฒนาคนอื่น ๆ (แต่อาจไม่สามารถทำได้ทุกครั้ง) หวังว่าประสบการณ์ของฉันจะช่วยผู้อื่นยินดีรับข้อเสนอแนะ
ในโครงการ Android ของเรามีส่วนประกอบมากมายเช่นปุ่มป้ายกำกับกล่องข้อความ ชื่อธรรมดา ๆ เช่น "ชื่อ" ซึ่งทำให้สับสนมากในการระบุว่า "ชื่อ" คือป้ายกำกับหรือกล่องข้อความ ส่วนใหญ่เกิดขึ้นเมื่อคุณดูแลโครงการที่พัฒนาโดยนักพัฒนารายอื่น ๆ
ดังนั้นเพื่อหลีกเลี่ยงความสับสนนี้ฉันจึงใช้ชื่อต่อไปนี้สำหรับ Buttons TextBoxes หรือ Labels
ตัวอย่าง:
btnName
labName
txtName
listName
อาจเป็นประโยชน์สำหรับคุณ
มีข้อ จำกัด บางประการ:
ขอแนะนำให้ปฏิบัติตามแนวทางหรือเรียนรู้จากรหัสมาตรฐานมากกว่า