2009-12-02 28 views
75

Tôi hiện đang lập trình một ứng dụng cho Android. Bây giờ những gì tôi phát hiện ra là bạn không thể đặt các đối tượng tài nguyên, ví dụ, một hình ảnh trong thư mục drawable và đặt tên nó là "myTestImage.jpg". Điều này sẽ cung cấp cho bạn một lỗi trình biên dịch vì cú pháp trường hợp lạc đà không được phép, vì vậy bạn phải đổi tên nó thành "my_test_image.jpg".Quy ước đặt tên cho Android: trường hợp thấp hơn với dấu gạch dưới và trường hợp lạc đà

Nhưng điều gì về id bạn xác định trong tệp XML. Giả sử bạn có định nghĩa sau đây

<TextView android:id="@+id/myTextViewFirstname" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Firstname" /> 

Đây là một định nghĩa hợp lệ, biên dịch và chỉ hoạt động tốt trên giả lập Android của tôi mặc dù - như bạn thấy - Tôi xác định id trong trường hợp lạc đà cú pháp.

Hiện tại, các mẫu Android luôn sử dụng chữ thường và dấu gạch dưới. Đây có phải chỉ là quy ước đặt tên để sử dụng chữ thường với dấu gạch dưới cho id hoặc có thể nó gây ra sự cố trên thiết bị thực không?

Thx

Trả lời

74

Thiết bị sẽ không phàn nàn nếu bạn sử dụng tên id trường hợp lạc đà. Đối với ứng dụng đầu tiên của tôi, tôi đã viết tất cả các id trong trường hợp lạc đà vì tôi nghĩ rằng nó xuất hiện tốt hơn trong mã Java theo cách đó, và nó hoạt động tốt.

tôi đang dần thay đổi tâm trí của tôi trên con lạc đà hợp cụ thể, tuy nhiên, vì bạn kết thúc với hai quy ước đặt tên khác nhau - ví dụ:

// This must be undescored due to naming constrictions 
setContentView(R.layout.my_long_layout_name); 

// Now this looks a little out of place 
findViewById(R.id.myLongSpecificId); 

Tôi cũng ngạc nhiên về các tiêu chuẩn tại đây. Google không nhất quán trong các ví dụ của họ; đôi khi chúng sử dụng tất cả chữ thường, đôi khi chúng chèn dấu gạch dưới và đôi khi chúng sử dụng trường hợp lạc đà.

+15

Vâng, đó chính xác là vấn đề của tôi. Chúng buộc bạn phải sử dụng quy ước đặt tên gạch dưới cho bố cục trong khi bạn có thể sử dụng trường hợp lạc đà hoặc gạch dưới cho các id tham chiếu đến các điều khiển/widget bên trong các định nghĩa bố cục XML. Google thực sự nên xác định một số tiêu chuẩn ở đây (nếu chúng chưa có, ít nhất tôi không tìm thấy bất kỳ thứ gì). Vì vậy, đi cho một cách chắc chắn là tốt nhất để nhất quán trong suốt ứng dụng cho dù bạn tham chiếu bố cục hoặc các trường tham chiếu id. – Juri

+0

Chỉ vì sự tò mò: Bạn có một liên kết mà Google không nhất quán, có nghĩa là họ đã sử dụng ký hiệu camel-case cho id không? – Juri

+6

Để gây nhầm lẫn hơn nữa, tên kiểu (giống như ID cho kiểu) trong các mẫu dự án sử dụng PascalCase, ví dụ: 'AppBaseTheme' và' AppTheme'. –

0

Nếu trình biên dịch của Android được thực sự làm những gì bạn nói hạn chế trường hợp lạc đà (mà có vẻ khá kỳ lạ) thì bạn nên dính vào các công ước thành lập.

Đi ngược lại hạt sẽ chỉ gây ra sự nhầm lẫn không cần thiết. Giữ mọi thứ nhất quán ở mọi nơi nếu có thể.

+0

Bạn có thể hiểu lầm những gì tôi đang cố gắng nói. Trình biên dịch sẽ khiếu nại nếu bạn đặt các tài nguyên như một tập tin và viết rằng trong trường hợp lạc đà. Tuy nhiên, trường hợp khác là khi bạn chỉ định ID trong các tệp bố cục XML. Ở đó bạn có khả năng đặt tên id trường hợp lạc đà và trình giả lập hoạt động tốt. Bây giờ như tôi đã đề cập, các mẫu của Google đều có dạng my_id_name, nhưng có rất nhiều mẫu khác xung quanh có tên id trường hợp lạc đà ... – Juri

1

tên tệp xml (được sử dụng trong thư mục drawable) phải là tất cả chữ thường được phân tách bằng ký tự gạch dưới _ vì tên tệp được viết hoa không được hỗ trợ trong xml.

+1

Đây không phải là về tên tệp và bên cạnh đó, một số người không thích viết hoa chữ cái đầu tiên khi vỏ lạc đà. – Jesper

+0

Đó là một IMO không ổn định. Bạn không thể có phân biệt chữ hoa chữ thường để phân biệt, không, nhưng tại sao không chỉ cấm các tệp tài nguyên có cùng tên thành phần gốc trong cùng một thư mục. – RichieHH

+0

(Btw nó IS về tên tập tin vs ID tài nguyên: kiểm tra lại OP) – RichieHH

8

Tôi nghĩ anh ấy đang nói về các id bên trong tệp xml.

ví dụ:

android:id="@+id/home_button" 

so

android:id="@+id/HomeButton" 

tôi đã không tìm thấy bất kỳ hội nghị hay hướng dẫn về vấn đề này, vì vậy các nhà phát triển trong dự án của tôi đang sử dụng cả hai phương pháp indistinctively, mà là khá đau đớn :(

+2

Thực ra không có hướng dẫn "chính thức" ở đây, nhưng tôi chắc chắn sẽ thiết lập một cho mỗi dự án tôi đang thực hiện ... về cơ bản giống như quy ước đặt tên nói chung – Juri

+0

Ông đang nói về ID liên quan đến các hạn chế đặt tên trên các tệp tài nguyên. – RichieHH

+0

Có một sự bất tiện lớn: CTRL + W trong Android Studio –

4

tôi nghĩ điều đó là tốt nếu chúng tôi sử dụng tất cả các chữ cái nhỏ có dấu gạch dưới.

Chỉ cần nhìn vào này (Thêm vào những gì Daniel đã trả lời)

// Camel Case 
    TextView tvUserName = (TextView) findViewById(R.id.tvUserName); 
// Small Caps and Underscores 
    TextView tvUserName = (TextView) findViewById(R.id.tv_user_name); 

theo kinh nghiệm riêng của tôi, tôi có xu hướng để có được một chút nhầm lẫn của công ước trường hợp lạc đà trong xml bởi vì khi bạn liên kết nó với Java mà cũng sử dụng trường hợp lạc đà (vì nó là tiêu chuẩn) nó trông giống như một doppleganger.

+0

Điều này rất chủ quan và không trả lời câu hỏi là tại sao bạn không thể đặt tên tệp tài nguyên tương tự như bạn có thể chuỗi ID. – RichieHH

12

Nếu bạn nhìn vào các trường android.R.id.*, bạn sẽ nhận thấy rằng tất cả chúng đều nằm trong trường hợp lạc đà. Vì vậy, nếu id android được viết trong trường hợp lạc đà, tôi đoán chúng tôi phải tuân theo quy ước này :)

+0

Họ đang trong trường hợp lạc đà có bởi vì họ đã được tạo ra trong camelCase. Điều này không đặt bất kỳ tiền lệ phong cách mã hóa nào cho cộng đồng nói chung và điều này không liên quan đến các quy ước đặt tên của các tệp tài nguyên so với các quy tắc của chuỗi ID, đó là những gì mà áp phích ban đầu đang yêu cầu. – RichieHH

+3

Có, chúng được tạo trong trường hợp lạc đà. Nhưng những ID này là từ chính API android nên nếu người tạo API đã sử dụng trường hợp lạc đà, tôi đoán đó là một cách tiếp cận tốt để tuân theo quy ước của anh ấy. –

+6

trường 'widget_frame' [http://developer.android.com/reference/android/R.id.html#widget_frame] cũng có trong trường' android.R.id. * '. trong lĩnh vực này Google sử dụng gạch dưới không lạc đà-trường hợp Vì vậy, kết luận của bạn về quy ước trường hợp lạc đà là đúng lựa chọn cho quy ước ID có thể là sai –

0

Tôi nghĩ rằng nếu chúng tôi sử dụng quy ước dưới đây cho id trong tệp xml và quy ước trường hợp lạc đà cho trường lớp thì nó sẽ cung cấp tốt hơn khả năng hiển thị cho mọi nhà phát triển để phân biệt giữa các id xml và các trường lớp.

4

Nếu bạn nhìn vào một số mẫu ứng dụng Googles như:

https://github.com/google/iosched

Họ sử dụng dấu gạch dưới. Vì vậy .... có lẽ đó là cách chúng ta nên làm điều đó?

Các vấn đề liên quan