Quy ước đặt tên Android


81

Tôi đang tìm kiếm một gợi ý quy ước đặt tên Android kỹ lưỡng. Tôi tìm thấy một chút ở đây:

http://source.android.com/source/code-style.html#follow-field-naming-conventions

mà nói:

  • Tên trường không công khai, không tĩnh bắt đầu bằng m.
  • Tên trường tĩnh bắt đầu bằng s.
  • Các trường khác bắt đầu bằng chữ thường.
  • Các trường cuối cùng tĩnh công khai (hằng số) là ALL_CAPS_WITH_UNDERSCORES.

Tuy nhiên, tôi đang tìm kiếm một thứ gì đó rộng rãi hơn bao gồm tất cả các khía cạnh của Android:

  • cách đặt tên cho bố cục và chế độ xem bên trong,
  • cách đặt tên menu
  • cách đặt tên cho các kiểu
  • cách đặt tên cho các bảng cơ sở dữ liệu (số ít, số nhiều) và các trường bên trong
  • Vân vân

Nếu có một số đề xuất được chấp nhận chung, tôi chỉ muốn làm theo điều đó. Tất cả các SDK dường như đi theo cách riêng của chúng, vì vậy tôi đặc biệt quan tâm đến cách Android để làm điều đó.


1
Vì đây là thành công đầu tiên của Google, tôi nghĩ rằng tôi sẽ thêm điều đó bằng cách sử dụng "refactor" trong cả Android-Studio và Eclipse, bạn có thể đổi tên một cái gì đó và thay đổi tất cả các lần xuất hiện của nó. Điều này rất hữu ích đối với tôi vì tôi rất kén chọn các quy ước đặt tên; do đó tìm kiếm của tôi. Thật dễ dàng để đổi tên phiên bản cụ thể đó và chỉ cần tiếp tục.
Eric Anthony

Bỏ qua phong cách mã hóa của Google, nó không được giải thích đủ ... và thậm chí không phải là Chuyển đổi hoàn chỉnh. Không có BẤT KỲ lượt chuyển đổi mã hóa quốc tế nào, vì mỗi công ty / grp đều có lượt chuyển đổi mã hóa riêng của họ. Tự dùng cái của bạn đi.
Yousha Aleayoub

Câu trả lời:


88

Nguyên tắc Android của ribot là một ví dụ điển hình về các quy ước đặt tên tiêu chuẩn:

Quy ước đặt tên cho tệp XML:

activity_<ACTIVITY NAME>.xml - for all activities
dialog_<DIALOG NAME>.xml - for all custom dialogs
row_<LIST_NAME>.xml - for custom row for listview
fragment_<FRAGMENT_NAME>.xml - for all fragments

Quy ước đặt tên cho thành phần / tiện ích con trong tệp xml:

Tất cả các thành phần cho X hoạt động phải bắt đầu với tên hoạt động tất cả các thành phần cần phải có tiền tố hoặc tên viết tắt như btn cho Button Ví dụ, tên cho thành phần hoạt động đăng nhập nên được như sau.

activity_login_btn_login
activity_login_et_username
activity_login_et_password

Tên ngắn gọn của các thành phần chính:

Button - btn
EditText - et
TextView - tv
ProgressBar - pb
Checkbox - chk
RadioButton - rb
ToggleButton - tb
Spinner - spn
Menu - mnu
ListView - lv
GalleryView - gv
LinearLayout -ll
RelativeLayout - rl

6
không thực sự metter làm điều đó .. miễn là bạn (hoặc tất cả công ty của bạn) adpot 1 kiểu người quan tâm nó đến từ đâu. Cho đến nay, tôi đã tạo ra gần như 4 ứng dụng android đơn giản hơn và tôi đã tự đưa ra quy ước gần như giống hệt như ứng dụng này. Tôi nghĩ đó là tất cả những gì bạn cần. Tôi sử dụng 'A_' thay vì 'hoạt động' và vân vân vì nó quá dài lol
Srneczek

Có thực sự cần thiết để bắt đầu tên của các thành phần bằng tên của hoạt động? Tôi có nghĩa là bạn sẽ tham chiếu đến các tên trong tệp bố cục tương ứng.
szedjani

1
Nó không thực sự cần thiết nhưng khi dự án của bạn đang phát triển lần rằng đây sẽ rất hữu ích
Pravin Bhosale

5
MainActivity + activity_main? Tôi biết đây là tiêu chuẩn, nhưng ai là người phát minh ra cái này? Hầu hết không được nghiên cứu kỹ lưỡng, đặc biệt là tại sao các tên dài hơn, khi các mảnh ghép vào đúng vị trí.
brainray

Cá nhân tôi không thấy điều này rất nhất quán
Jethro

28

Đây là một bộ sưu tập tuyệt vời các phương pháp hay nhất để bắt đầu: https://github.com/futurice/android-best-practices

Đây là những gì tôi sử dụng. Tôi cũng sẽ sao chép từ liên kết đó.

Đặt tên đối tượng

  • Không sử dụng tiền tố mhoặc stheo nguyên tắc của Google. Tôi đã dừng lại trong nhiều năm và tôi thấy mọi việc dễ dàng hơn nếu không có chúng. IDE sẽ cho bạn biết khi nào bạn đang sử dụng thứ gì đó riêng tư hoặc tĩnh; nó dường như là một quy ước lỗi thời.
  • CONSTANTS bắt đầu bằng chữ hoa
  • Các từ viết tắt chỉ nên viết hoa chữ cái đầu tiên. Ví dụ, functionUrlunitId. Không unitID.
  • Tiền tố với loại đối tượng. Ví dụ: một TextView có chứa tên sẽ là tvName. Một EditView với mật khẩu sẽ là etPass.
  • Nếu đó là thứ thường chỉ được sử dụng một lần trong một hoạt động (ví dụ: ListView), đừng ngại gọi nó lv.
  • Nếu nó không phải là một kiểu đối tượng, chỉ cần đặt tên cho nó theo chức năng của nó. Ví dụ: nếu đó là một chuỗi chứa ID, hãy đặt tên nó là id, không phải stringId. IDE sẽ cho bạn biết khi nào đó là một chuỗi hoặc một float hoặc một dài.
  • Giữ cho nó rõ ràng. Sử dụng một cái gì đó như Passthay vì Password.
  • Trong XML, tên phải được gạch dưới và không viết hoa, ví dụ tv_nameet_pass
  • Đặt android:idthuộc tính đầu tiên trong XML.

Đặt tên tệp

  • Bố cục tiền tố với loại nó là. Ví dụ fragment_contact_details.xml, view_primary_button.xml, activity_main.xml.
  • Đối với các lớp, hãy phân loại chúng vào các thư mục, nhưng sử dụng các hậu tố. Ví dụ, /activities/MainActivity.javahoặc /fragments/DeleteDialog.java. Thư mục của tôi là các hoạt động, phân đoạn, bộ điều hợp, mô hìnhutils .
  • Bộ điều hợp nên cho biết chúng được sử dụng như thế nào và khi nào. Vì vậy, một bộ điều hợp ListView cho ChatActivity có thể được gọi ChatListAdapter.

color.xml vàmens.xml dưới dạng bảng màu

  • Đối với màu sắc, sử dụng tên như gray_light, không button_foreground.

  • Đối với kích thước, sử dụng tên như spacing_large, không button_upper_padding.

  • Nếu bạn muốn đặt một cái gì đó cụ thể cho màu nút hoặc phần đệm của mình, hãy sử dụng tệp kiểu.

string.xml

  • Đặt tên cho chuỗi của bạn bằng các khóa giống với không gian tên và đừng sợ lặp lại một giá trị cho hai hoặc nhiều khóa.

  • Sử dụng error.message.network, không network_error.

Lý luận

Mục đích của quy ước đặt tên không phải là để làm cho mọi thứ gọn gàng và nhất quán . Nó ở đó để gắn cờ các lỗi có thể xảy ra và cải thiện quy trình làm việc. Hầu hết trong số này được thiết kế để thuận tiện cho các phím tắt. Cố gắng tập trung vào việc giảm thiểu lỗi và cải thiện quy trình làm việc hơn là trông đẹp mắt.

Các tiền tố rất phù hợp cho những người, "Tên của TextView đó là gì?" khoảnh khắc.

Các hậu tố ở đó cho những thứ mà bạn không thường xuyên truy cập theo cách đó, nhưng có thể gây nhầm lẫn. Ví dụ: tôi có thể không chắc liệu mình có đặt mã của mình vào Activity, Fragment hay Adapter của trang đó hay không. Chúng có thể được bỏ nếu bạn muốn.

Id XML thường ở dạng chữ thường và sử dụng dấu gạch dưới chỉ vì dường như mọi người đều làm theo cách này.


Còn về tên của các lớp. ví dụ: ActivityMainhoặc MainActivity. Bạn muốn giới thiệu cái nào? Tôi nghĩ rằng nó làm cho tinh thần để đi theo: CLASS: NameActivity, LAYOUT: name_activity, COMPONENT: nameactivity_component_name. Ví dụ về điều này sẽ là MainActivity, main_activity, mainactivity_btn_cancel
Jethro

4
Tôi đang sử dụng tiền tố m và s. Tôi thấy nó rất hữu ích và chắc chắn rằng nó không làm cho mã trở nên tồi tệ hơn. Hơn nữa, đôi khi tôi thích mở một số tệp mà không có IDE. Rất dễ dàng để phân biệt các trường và các biến đơn giản.
Arkadiusz Cieśliński

Tôi đang xem ví dụ về Camera2 vào lúc này và tôi thực sự không quan tâm mBackgroundHandlerđến nguồn gốc của v.v., vì vậy việc đặt tên cho chúng backgroundHandlersẽ đặt thông tin quan trọng ở bên trái. Nếu bạn cần, việc thêm hậu tố '' vào các tham số và hậu tố ' _ ' cho các biến cục bộ cho phép bạn bỏ qua các dấu gạch dưới một cách trực quan và tinh thần trừ khi bạn cần tập trung vào chúng.
WillC

12

SỰ ĐỒNG Ý
Mọi người (trừ khi làm việc theo nhóm) sẽ có quy ước riêng và bạn chọn cái nào không quan trọng. Đảm bảo rằng nó nhất quán trong toàn bộ ứng dụng là điều quan trọng.


CẤU TRÚC
Cá nhân tôi sử dụng quy ước đặt tên như thế này vì nó chạy từ tên lớp xuống thành phần và nhất quán trong suốt xml:

  • LỚP :<ClassName>
  • HOẠT ĐỘNG :<ClassName>**Activity**
  • BỐ TRÍ :classname_activity
  • ID HỢP PHẦN :classname_activity_component_name

Một ví dụ về điều này sẽ là OrderActivity.class, order_activity.xml, order_activity_bn_cancel. Lưu ý rằng tất cả XML đều ở dạng chữ thường.


CÁC BẢNG CHỮ VIẾT TẮT
Nếu bạn muốn sử dụng các tên ngắn hơn để giữ cho mã gọn gàng hơn; thì một phương pháp khác có thể là viết tắt TẤT CẢ các tên trong XML cũng như các bố cục.

Ví dụ về điều này sẽ là OrderActivity .class: ord_act .xml, ord_act _bt_can, ord_act _ti_nam, ord_act _tv_nam. Tôi chia nhỏ các tên thành ba nhưng điều này phụ thuộc vào số lượng tên tương tự bạn có


CÁC LOẠI THÀNH PHẦN CHỮ VIẾT TẮT
Khi viết tắt các kiểu thành phần, hãy cố gắng giữ cho chúng nhất quán. Tôi thường sử dụng hai chữ cái cho loại thành phần và ba chữ cái cho tên. Tuy nhiên, đôi khi tên sẽ không cần thiết nếu đó là yếu tố duy nhất của loại đó trong bố cục. Nguyên tắc của ID là duy nhất

  • ID HỢP PHẦN :nam_act_component_nam

CÁC CHỮ VIẾT TẮT LOẠI PHỐI HỢP (Danh sách này hiển thị hai chữ cái có rất nhiều)
Bố cục khung: fl
Bố trí tuyến tính: ll
Bố cục bảng: tl
Hàng bảng: tr
Bố cục lưới: gl
Bố cục tương đối: rl

Text View: tv
Nút: bt
Check Box: cb
Switch: sw
Nút Toggle: tb
Image Button: ib
Image View: iv
Tiến trình Bar: pb
Seek Bar: sb
Rating Bar: rb
Spinner: sp
WebView: wv
Edit Text: et

Nhóm radio: rg
Chế độ xem danh sách: lv
Chế độ xem lưới: gv
Chế độ xem danh sách có thể mở rộng: el
Chế độ xem cuộn: sv
Chế độ xem cuộn ngang: hs
Chế độ xem tìm kiếm: * se
Tab Máy chủ: th
Xem video: vv
Bộ lọc trình quay số: df

Bao gồm: ic
Fragment: fr
Custom View (other): cv


2
nút radio = thanh đánh giá?
Mitch

8

Tôi không nghĩ rằng có một quy ước cho điều này được nêu ra. mỗi công ty có những quy tắc riêng và tôi không nghĩ có ai quan tâm nhiều đến điều đó ở đây.

Đối với tôi, tôi thích đặt tên để gắn với ngữ cảnh. ví dụ: nếu có một hoạt động được gọi là "MainActivity", tên bố cục của nó sẽ là "main_activity.xml" và đối với mỗi tài nguyên được liên kết với hoạt động này, tôi thêm tiền tố "main_activity" để tôi biết rằng nó sử dụng nó. tương tự đối với các id được sử dụng cho hoạt động này.

Lý do tôi sử dụng những cách đặt tên đó là vì nó dễ tìm hơn, xóa nếu cần và bạn sẽ không bị thay thế chúng bằng những cái khác nếu bạn sử dụng thư viện android vì những cái tên này khá độc đáo.

Tôi cũng cố gắng đặt tên có ý nghĩa, vì vậy bạn thường sẽ không thấy "listView" hoặc "imageView2" dưới dạng id, mà là một cái gì đó như "contactListView" và "contactImageView". cùng tên (hoặc tương tự) cũng sẽ khớp với các biến bên trong mã java, để dễ tìm hơn.

Vì vậy, tóm lại, mẹo của tôi là:

  • cố gắng tránh các số bên trong tên. chúng thường không có nhiều ý nghĩa và cho thấy rằng bạn chỉ sử dụng kéo và thả cho trình thiết kế giao diện người dùng.

  • cho các bản demo, POC và cho các câu hỏi ở đây, đừng lo lắng về việc đặt tên.

  • cố gắng thêm tiền tố vào tất cả tên của tài nguyên (bao gồm id) để cho biết chúng thuộc ngữ cảnh nào và để đạt được tính duy nhất.

  • đặt tên có ý nghĩa bất cứ nơi nào có thể.


2

Các plugin Android Eclipse mới nhất tự động tạo một số tệp bạn đề cập khi bạn tạo một dự án mới. Từ đó, việc đặt tên giống như sau:

layout/activity_main.xml
menu/activity_main.xml
...

Tôi đã theo dõi chương trình này với ví dụ:

layout/fragment_a.xml
layout/fragment_b.xml
...

Vì vậy, nó giống như với tên gói, từ chung chung đến chi tiết. Nó cũng cho phép phân loại gọn gàng.


1

Mỗi cơ quan đều sử dụng mã riêng của mình, Mục tiêu chính là tránh sai lầm và hiểu sai, đặc biệt khi người khác đọc mã của bạn. Mặc dù đánh dấu cú pháp và kiểm tra mã tự động trong IDE hiện đại làm cho nó kém đi khá nhiều.

Nhưng những quy ước đặt tên này cũng rất thuận tiện khi bật tính năng hoàn tất mã. Ví dụ: chỉ cần nhập mvà tự động hoàn thành sẽ hiển thị cho bạn danh sách các trường lớp.

Nhưng nhiều khi bạn phải làm việc với mã của người khác, mã này không sử dụng quy ước như vậy. các biến được bảo vệ như vậy và các tham số phương thức bị ghi đè chỉ làm tăng thêm sự nhầm lẫn.

Vài ví dụ:

  • Tiền tố các biến lớp với m và tạo các biến cuối cùng tĩnh là chữ hoa, với các _từ phân tách. Không đặt tiền tố bất kỳ thứ gì cho các biến phạm vi thấp hơn.

  • Bố trí tên sau khi phụ huynh UI, ví dụ act_main.xml, frg_detail.xml, itm__act_main__list1.xml; cho một hoạt động MainActivity, một phân đoạn DetailFragment, bố cục mục cho một ListViewtrong tương ứng MainActivityvới id list1.

  • Đặt tên cho Id phần tử trong các bố cục xml như: lsv__act_main__list1cho một ListView và btn__act_main__submitcho một phần tử Nút. Điều này làm cho chúng dễ dàng hơn để tìm thấy với tự động hoàn thành.


thx - cho tôi mã hóa ước không thực sự vô nghĩa trong thời đại của IDE mạnh mẽ, chỉ mất của tôi vào nó vì vậy tôi hy vọng sẽ tìm thấy một số người nói chung được chấp nhận
dorjeduck

Tốt rồi. Chúng cũng có những lợi ích khác: Bạn thấy ID của giao diện người dùng trong LogCat và từ ID, bạn biết nó là gì và tìm nó ở đâu trong mã.
SD

Tôi sẽ đi với tên đầy đủ cho các tiền tố: activit_main.xml, fragment_main.xml, button_activity_main_submit.xmlvv
Ramón García-Pérez

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.