Có quy ước về cách đặt tên tài nguyên không?


104

Có quy ước nào về cách đặt tên tài nguyên trong Android không? Ví dụ: các nút, textView, menu, v.v.


Câu hỏi hay. Là một chủ đề liên quan, tôi đã hỏi liệu sử dụng R. hoặc android.R tùy chỉnh.
rds


Đối với các nguồn tài nguyên kích thước, tôi đã đưa ra những
Pravin Sonawane

Câu trả lời:


28

Tôi không biết liệu có bất kỳ khuyến nghị chính thức nào không.

Đối với id trong bố cục của tôi có tiện ích và vùng chứa, tôi sử dụng quy ước:

<layout>_<widget/container>_<name>

Tôi thực hiện chiến lược tương tự cho bất kỳ kích thước, chuỗi, số và màu nào tôi sử dụng trong các bố cục đó. Tuy nhiên, tôi thử khái quát hóa. Ví dụ: nếu tất cả các nút đều có một Màu văn bản chung, tôi sẽ không đặt tên trước cho bố cục. Tên tài nguyên sẽ là 'button_textColor'. Nếu tất cả các Màu văn bản đang sử dụng cùng một tài nguyên thì nó sẽ được đặt tên là 'Màu văn bản'. Đối với Phong cách, điều này cũng thường xảy ra.

Đối với các tài nguyên menu tôi sử dụng:

menu_<activity>_<name>

Hình ảnh động chỉ khác nhau là bạn không thể sử dụng chữ hoa. Tôi tin rằng các tài nguyên xml có thể vẽ được cũng vậy.


1
Tôi làm điều này để, chỉ tôi muốn rút ngắn bố cục và tên tiện ích, để tránh tên dài, ví dụ: hộp chỉnh sửa tên người dùng trên bố cục xác thực sẽ là: "au_eb_username" thay vì "verify_editbox_username"
Hossein Shahdoost

46

Android SDK sẽ là một nơi tốt để bắt đầu.

Ví dụ: tôi cố gắng xác định phạm vi ID trong hoạt động.

Nếu tôi có ListViewnó, nó sẽ đơn giản là @android:id/listtrong tất cả các hoạt động.
Tuy nhiên, nếu tôi có hai danh sách thì tôi sẽ sử dụng danh sách cụ thể hơn @id/list_apple@id/list_orange

Vì vậy, chung chung (id, ...) được sử dụng lại trong R.java filekhi những cái duy nhất (đôi khi được sử dụng lại) được đặt tiền tố bằng những cái chung được phân tách bằng dấu gạch dưới .


Tôi đã quan sát thấy một điểm dưới đây, ví dụ:

Bố trí chiều rộng là layout_widthtrong xmllayoutWidthtrong đang , vì vậy tôi cố gắng để dính vào nó nhưlist_apple

Vì vậy, một nút Đăng nhập sẽ là login, nhưng nếu chúng ta có hai lần đăng nhập thì login_foologin_bar.


Tôi rất tiếc không thể thu lợi từ câu trả lời của bạn. Nó bắn vào quá nhiều mục tiêu để mắt tôi nhanh. Ví dụ, tôi tự hỏi làm thế nào bạn đặt tên cho một nút đăng ký ở hai chế độ xem khác nhau của hai hoạt động.
Stephane

@StephaneEybert, Bạn có thể thêm tên hoạt động vào hỗn hợp, mua tại sao bạn lại muốn truy cập chế độ xem của một hoạt động khác. :)
Samuel

Điều này rất hay và đơn giản, và nó làm cho mã xml trở nên sạch sẽ. Nhưng nếu bạn đang cố gắng gỡ lỗi một số ứng dụng lớn, bạn có thể khó chịu khi cố gắng theo dõi năm mươi nút khác nhau có tên "đóng". Tôi nhiều thích tiền tố mỗi View với tên của bố trí của nó.
SMBiggs

25

Lấy từ tài liệu của Android . Có nhiều hơn ở đó về chủ đề này.


12
Hai của tôi cent: Tôi không giống như ic prefix
AlikElzin-kilaka

1
"Lưu ý rằng bạn không bắt buộc phải sử dụng bất kỳ loại tiền tố dùng chung nào — làm như vậy chỉ để thuận tiện cho bạn." Đây là dòng bên dưới biểu đồ này. Vì vậy tiền tố là vấn đề của sự lựa chọn.
Tushar Vengurlekar

Quy ước đặt tên cho Chuỗi đơn giản là gì? Tôi có khoảng 30000 chuỗi tôi sử dụng trong ứng dụng của mình. Đó là tâm trí boggling.
User3

17

Để trả lời câu hỏi của bạn: Có, có.

Bạn có thể tìm thấy nhiều người trong số họ thông qua tìm kiếm của google chẳng hạn. Và không có cái gọi là quy ước đặt tên tốt nhất. Nó luôn phụ thuộc vào nhu cầu của bạn và thuộc tính dự án của bạn (quan trọng nhất là phạm vi).


Gần đây, tôi đã đọc một bài đăng trên blog khá hay về cách đặt tên tài nguyên trong Android XML từ Jeroen Mols. Tác giả đề cập đến nguyên tắc cơ bản mà tất cả các tài nguyên phải tuân theo và sau đó quy ước này được áp dụng cho từng loại tài nguyên như thế nào. Cả hai đều được mô tả trên bảng gian lận đặt tên tài nguyên Android :

Bảng gian lận đặt tên tài nguyên Android

Sau đó, anh ta mô tả chi tiết từng yếu tố và từng loại tài nguyên.


Tôi có thể nói rằng bạn có thể sử dụng quy ước này từ các dự án vừa và nhỏ (sử dụng cá nhân, các ứng dụng hợp đồng vài tháng). Mặc dù vậy, tôi sẽ không đề xuất nó cho các dự án thời gian dài với hơn 50 hoạt động hoặc hơn 1000 chuỗi.

Các quy ước về giá trị tài nguyên trong các dự án quy mô lớn như vậy đòi hỏi phải điều tra thêm về cách chúng sẽ được sử dụng. Lấy ví dụ về chuỗi. Có thể bị ảnh hưởng bởi quy mô nhóm của bạn, trung tâm dịch thuật bạn đang sử dụng (nếu có), VCS bạn đang sử dụng (để tránh xung đột hợp nhất chẳng hạn), v.v. Bạn thậm chí có thể nghĩ đến việc tách chuỗi thành nhiều tệp.

Tôi cho rằng bạn đang tìm kiếm thứ gì đó để bắt đầu. Vì vậy, tôi muốn giới thiệu bài đăng trên blog mà tôi đã đề cập. Nó tốt cho người mới bắt đầu và bạn chắc chắn có thể sử dụng nó như nguồn cảm hứng để tạo ra các quy ước đặt tên hay của riêng mình.

Cũng nên nhớ rằng khi một dự án phát triển, nhiều nhu cầu và yêu cầu có thể thay đổi theo thời gian. Vì vậy, hoàn toàn bình thường khi quy ước đặt tên đã phù hợp ban đầu sẽ không còn phù hợp sau 2 năm nữa. Và nó hoàn toàn ổn. Bạn không nên cố gắng dự đoán tương lai. Chỉ cần chọn một quy ước và làm theo nó. Bạn sẽ tìm thấy nếu nó phù hợp với bạn và dự án của bạn. Nếu không, hãy nghĩ xem tại sao nó không phù hợp và bắt đầu sử dụng thứ khác.


15

Có một số quy ước được sử dụng trong tài nguyên:

  • Đối với các tài nguyên tồn tại dưới dạng tệp riêng biệt, chúng phải là low_case_underscore_separated. Công cụ appt đảm bảo rằng các tệp của bạn chỉ có chữ thường, vì việc sử dụng chữ hoa hỗn hợp có thể gây ra sự cố trên hệ thống tệp phân biệt chữ hoa chữ thường.
  • Đối với các tài nguyên chỉ được khai báo trong giá trị / ... (thuộc tính, chuỗi, v.v.), quy ước thường là mixCase.
  • Đôi khi có một quy ước được sử dụng để gắn thẻ tên với "phân loại" để có không gian tên đơn giản. Đây là ví dụ mà bạn thấy những thứ như layout_width và layout_alignLeft. Trong tệp bố cục, các thuộc tính cho cả Chế độ xem và quản lý bố cục mẹ được trộn với nhau, mặc dù chúng là các chủ sở hữu khác nhau. Quy ước "layout_ *" đảm bảo rằng không có xung đột giữa các tên này và dễ hiểu tên tác động đến thực thể nào.

Quy ước "layout_blah" này cũng đã được sử dụng ở một vài nơi khác. Ví dụ, có các thuộc tính "state_blah" là các trạng thái có thể vẽ mà một khung nhìn có thể có.

Cũng vì hai quy ước này (underscore_separated cho tệp, mixCase cho tài nguyên được khai báo), bạn sẽ thấy một số điểm không nhất quán. Ví dụ, màu có thể được khai báo với một trong hai tệp hoặc dưới dạng giá trị rõ ràng. Nói chung, chúng tôi muốn gắn bó với underscore_separated cho tất cả những thứ đó, nhưng nó không phải lúc nào cũng xảy ra.

Cuối cùng, chúng tôi không lo lắng nhiều về quy ước đặt tên cho các tài nguyên. Cái lớn mà chúng tôi giữ nhất quán là "mixCase" cho các thuộc tính và việc sử dụng "layout_blah" để xác định các thuộc tính tham số bố cục.

Ngoài ra, duyệt qua các nguồn công khai ở đây sẽ mang lại cảm giác tốt cho các quy ước:

http://developer.android.com/reference/android/R.html

Bạn sẽ thấy tất cả các thuộc tính đều khá nhất quán (nếu bạn hiểu được quy ước layout_), các phần có thể vẽ đều là dấu gạch ngang_ phân cách, v.v.


12

Đây là một vấn đề phổ biến đối với bất kỳ ngôn ngữ hoặc khuôn khổ nào, nhưng miễn là bạn tránh các từ dành riêng, bạn sẽ ổn nếu bạn có thể nhớ những gì bạn đã gọi là sự vật.

Tôi đã lưu ý rằng Android đặt một cấu trúc lại trên tên tệp tài nguyên xml nhưng dấu gạch dưới dường như vẫn ổn. ADT thực sự tuyên bố

Tên tài nguyên dựa trên tệp chỉ được chứa chữ thường az, 0-9 hoặc _.

Điều gì đó khiến tôi vấp phải lúc đầu là thiếu không gian tên với id, nhưng điều này thường có thể được bỏ qua nếu bạn có hai id giống nhau, Android sẽ chỉ sử dụng lại id đã xác định.

Đối với id, tôi sử dụng một định nghĩa 3 chữ cái theo sau là những gì nó đề cập đến trong ký hiệu lạc đà, ví dụ: lblFoo cho nhãn văn bản tĩnh (hoặc textview), txtFoo cho hộp văn bản có thể chỉnh sửa (edittext trong Android). Điều này thoạt đầu có vẻ kỳ quặc nhưng tôi đã sử dụng nó kể từ VB6 và những điều khiển đó được gọi là nhãn và hộp văn bản.

Đây là một số khác mà tôi thường sử dụng:

  • btnFoo - nút
  • pwdFoo - mật khẩu
  • lstFoo - danh sách
  • clrFoo - màu
  • tblFoo - bảng
  • colFoo - cột
  • rowFoo - hàng
  • imgFoo - hình ảnh
  • dimFoo - kích thước
  • padFoo - đệm
  • mrgFoo - ký quỹ

Tôi cũng sử dụng mã tương tự trong tệp java nên tôi không cần phải suy nghĩ về nó, phạm vi gói sẽ cho phép điều này khá thú vị:

Button btnFoo = (Button)findViewById(R.id.btnFoo);

Bạn có thể nếu bạn thích thêm một khoảng cách nhỏ bằng cách sử dụng dấu gạch dưới tức là btn_foo ... Tôi có thể sẽ làm điều này nếu tôi có thể phá vỡ thói quen cũ.

Có những người cho rằng viết tắt những điều này có thể không lý tưởng và những người theo chủ nghĩa thuần túy sẽ cho rằng nên sử dụng tên đầy đủ, nhưng khi bạn đặt tên cho hàng tá điều khiển và thay đổi giữa các hệ thống và khuôn khổ khác nhau, tên đầy đủ sẽ mất đi ý nghĩa của chúng, tôi đã sử dụng chúng trong hơn một thập kỷ trong VB, C ++, ASP.NET, WinForms trong C # và VB.NET, Android và Python. Tôi không bao giờ cần nhớ Android gọi nó là hộp văn bản hay văn bản chỉnh sửa. Tất cả những gì tôi cần biết là lblFoo là nhãn tĩnh và txtFoo là thứ mà người dùng nhập đầu vào.

Một lưu ý cuối cùng là bất kể bạn quyết định theo quy ước nào, điều quan trọng là đặt tên cho các điều khiển một cách chính xác và nhất quán, để bạn không phải vật lộn với id mặc định mơ hồ, chẳng hạn như TextView5 hoặc hỗn hợp các quy ước khác nhau


4

Liên kết hữu ích cho nhà thiết kế và nhà phát triển - tại đây

Thứ nguyên và kích thước, quy ước đặt tên, phong cách và chủ đề, chín bản vá, v.v.


3

Tôi không nghĩ rằng có bất kỳ quy ước tiêu chuẩn nào được Google quảng bá. Tôi đã thấy tất cả các cách mọi người đặt tên cho các thứ khác nhau, ngay cả trong các ứng dụng chính thức khác nhau của Google.

Bất cứ điều gì giúp bạn nhiều nhất khi cố gắng hiểu bố cục 100 tệp (hoặc tệp có thể vẽ, menu, v.v.) trong một hệ thống phân cấp thư mục.


3

Một câu trả lời ngắn gọn: nếu bạn muốn học hỏi từ các nhà phát triển Android, một ví dụ điển hình là thư viện hỗ trợ v7 ( https://dl-ssl.google.com/android/repository/support_r21.zip )

Mặt khác, đây là những gì tôi đã cân nhắc để đặt tên tài nguyên:
1. dễ dàng tìm tài nguyên khi viết mã
2. hiểu tài nguyên dễ dàng khi đọc mã
3. đặt tên hữu ích cho người dịch ( R.string.*chỉ tài nguyên)
4. sử dụng lại bố cục với <include/>( R.id.*xung đột tài nguyên)
5. xử lý với các dự án thư viện

Về mặt logic, việc sắp xếp tài nguyên không khác gì nhóm các lớp java thành các gói (hoặc đặt các tệp vào thư mục). Tuy nhiên, vì tài nguyên Android không có không gian tên, tiền tố phải được thêm vào tên tài nguyên để đạt được điều tương tự (ví dụ: com.example.myapp.phototrở thành com_example_myapp_photo).

Tôi đề nghị chia ứng dụng thành các thành phần riêng biệt (hoạt động, phân đoạn, hộp thoại, v.v.) với các tên ngắn duy nhất có thể được sử dụng làm tiền tố tài nguyên. Bằng cách này, chúng tôi đang nhóm các tài nguyên có chức năng liên quan lại với nhau, điều này giúp dễ dàng tìm thấy chúng (điểm 1) và đồng thời chúng tôi tránh xung đột đặt tên với cả hai <include/>và các dự án thư viện (điểm 4 và 5). Lưu ý rằng các tài nguyên chung cho nhiều thành phần vẫn có thể có tiền tố (chẳng hạn như R.string.myapp_ok_button).

Sau tiền tố, tên sẽ cho chúng ta biết tài nguyên được sử dụng để làm gì (hành động được thực hiện, nội dung được hiển thị, v.v.). Chọn một cái tên hay là rất quan trọng để hiểu (điểm 2 và 3).

Đôi khi "component_name" sẽ cung cấp cho chúng ta đủ thông tin, điều này đặc biệt đúng nếu kiểu đã được cung cấp bởi lớp R (trong R.string.myapp_name_string"chuỗi" thứ 2 là dư thừa). Tuy nhiên, việc thêm loại một cách rõ ràng có thể cải thiện sự hiểu biết (ví dụ: có thể hữu ích cho người dịch trong việc phân biệt giữa bánh mì nướng hoặc nhãn). Đôi khi các phần "tên" và "loại" có thể được hoán đổi để cho phép lọc dựa trên loại (R.string.photo_menu_* sẽ chỉ cung cấp cho chúng tôi các mục liên quan đến menu cho thành phần ảnh).

Giả sử chúng tôi đang viết một hoạt động để chụp ảnh, class com.example.myapp.photo .PhotoActivity. Tài nguyên của chúng tôi có thể trông như thế này (được nhóm theo thành phần "ảnh"):

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  

2

Nếu bạn xem xét tài liệu của Android, có rất nhiều đề cập về "phương pháp hay nhất", nhưng chắc chắn không có quy tắc cụ thể nào. Ví dụ: trong Nguyên tắc thiết kế biểu tượng , Google đề xuất đặt tên cho các biểu tượng có tiền tố "ic_".

Một nơi tốt để bắt đầu có thể là Cung cấp Tài nguyên .

Cũng tìm hiểu kỹ về nguồn / ví dụ SDK cũng như về Blog nhà phát triển Android nếu bạn muốn xem cách các nhà phát triển của Google thực hiện công việc.


1

Tôi thấy quy ước đặt tên tiếp theo hữu ích cho các chuỗi:

[<action>]_<object>_<purpose>

Ví dụ: clear_playlist_text, delete_song_message, update_playlist_positivebutton_text. Và "hành động" ở đây là tùy chọn.


0

bạn có thể đọc tài liệu google về kiểu mã để có ý tưởng ở đây


9
Bài viết này không có gì về quy ước tài nguyên của Android.
Eugene

ồ xin lỗi, tôi đoán tôi đã hiểu sai câu hỏi của bạn. Tôi biết rằng đối với các tệp menu, bạn nên sử dụng dấu gạch dưới để phân tách các từ. Ví dụ. options_menu.xml
Kevin Qiu,

0

Tôi thường tuân theo các quy ước đặt tên java cho id tài nguyên (không phải cho tệp cho tệp) ngoại trừ tôi đã thêm "x" vào trước id ví dụ:

<TextView android:id="@+id/xTvName" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>

Trong java, chúng ta có thể sử dụng nó đơn giản (chúng ta cũng có thể nhớ đơn giản)

TextView mTvName=(TextView)findViewById(R.id.xTvName);

Ở đây mTvName (Đó là quy ước đặt tên nói chung do android đề xuất) và xTvName được đặt tên trong tệp bố cục như một phần của Id TextView của android (x có nghĩa là XML), tôi đã tuân theo kiểu quy ước đặt tên này cho các đối tượng xem như Buttons và EditText, v.v.

trong IDS XML: xViewTypeSpecificName

trong Java: mViewTypeSpeficName

Các quy ước trên giúp cuộc sống của tôi dễ dàng hơn khi tôi tạo các bố cục phức tạp. Chỉ cần cố gắng làm cho tên của bạn càng ngắn càng tốt và sẽ tốt hơn nếu chúng dễ hiểu và có ý nghĩa đối với những người đồng phát triển khác (nhưng có thể không phải lúc nào cũng có thể thực hiện được).


0

Trong các dự án Android của chúng tôi, có rất nhiều thành phần như nút, nhãn, hộp văn bản. Vì vậy, tên đơn giản như ví dụ "tên", điều này rất khó xác định "tên" là nhãn hoặc hộp văn bản. Chủ yếu nó xảy ra khi bạn đang duy trì các dự án do một số nhà phát triển khác phát triển.

Vì vậy, để tránh loại nhầm lẫn này, tôi đã sử dụng các tên sau cho Buttons TextBoxes hoặc Labels

Thí dụ :

 btnName
 labName
 txtName
 listName

Có thể điều này là hữu ích cho bạn.


-2

Có một số hạn chế:

  1. Tên tài nguyên phải chứa az, 0-9, _
  2. Tên tài nguyên phải bắt đầu bằng az, _

Nhân tiện, bạn nên làm theo các hướng dẫn hoặc học từ mã tiêu chuẩn.

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.