Android'de kaynakların nasıl adlandırılacağıyla ilgili kurallar var mı? Örneğin düğmeler, metin görünümleri, menüler vb.
Android'de kaynakların nasıl adlandırılacağıyla ilgili kurallar var mı? Örneğin düğmeler, metin görünümleri, menüler vb.
Yanıtlar:
Herhangi bir resmi tavsiye var mı bilmiyorum.
Widget'ları ve kapsayıcıları olan düzenlerimdeki kimlikler için şu kuralı kullanıyorum:
<layout>_<widget/container>_<name>
Bu düzenlerde kullandığım tüm boyutlar, dizeler, sayılar ve renkler için aynı stratejiyi uyguluyorum. Ancak, genellemeye çalışıyorum. örneğin, tüm düğmelerde ortak bir textColor varsa, adın önüne düzen eklemeyeceğim. Kaynak adı 'button_textColor' olacaktır. Tüm textColors kaynağı aynı kullanıyorsa, 'textColor' olarak adlandırılacaktır. Stiller için de durum genellikle böyledir.
Menü kaynakları için kullanıyorum:
menu_<activity>_<name>
Animasyonlar yalnızca büyük harf kullanamadığınız için farklıdır. Aynı şey çekilebilir xml kaynakları için de geçerli sanırım.
Android SDK, başlamak için iyi bir yer olacaktır.
Örneğin, etkinlik içindeki kimlikleri kapsamaya çalışıyorum.
Olsaydı , tüm faaliyetlerde ListView
olurdu @android:id/list
.
Bununla birlikte, iki listem olsaydı, daha özel olanı kullanırdım @id/list_apple
ve@id/list_orange
Böylece R.java file
, benzersiz olanlar (bazen yeniden kullanılır) bir alt çizgiyle ayrılan genel olanlarla öneklenirken genel (kimlikler, ...) yeniden kullanılır .
Alt çizgi bir şey gözlemledim, örneğin:
Olduğu genişliğinin Düzen layout_width
içinde xml ve layoutWidth
de kod Ben buna sadık kalmak için deneyin böylece,list_apple
Yani bir Giriş düğmesi olacak login
, ancak iki girişimiz varsa o zaman login_foo
ve login_bar
.
Alındığı Android'in belgelerinde . Konuyla ilgili daha fazlası var.
Sorunuza cevap vermek için: Evet, var.
Birçoğunu örneğin google arama yoluyla bulabilirsiniz . Ve en iyi adlandırma kuralı diye bir şey yoktur. Her zaman ihtiyaçlarınıza ve proje özelliklerinize (en önemlisi kapsam) bağlıdır.
Son zamanlarda, Jeroen Mols'tan Android XML'deki kaynakları isimlendirme hakkında oldukça iyi bir blog yazısı okudum . Yazar, tüm kaynakların izlemesi gereken temel ilkeden ve ardından bu sözleşmenin her kaynak türüne nasıl uygulandığından bahseder. Her ikisi de Android kaynak adlandırma hile sayfasında açıklanmıştır :
Daha sonra her öğeyi ve her kaynak türünü ayrıntılı olarak açıklar.
Bu sözleşmeyi küçükten orta ölçekli projelere (kişisel kullanım, birkaç aylık sözleşme uygulamaları) kullanabileceğinizi söyleyebilirim. Yine de 50+ aktivite veya 1000+ dizge gibi uzun süreli projeler için tavsiye etmem.
Bu kadar büyük ölçekli projelerdeki kaynak değerlerine yönelik sözleşmeler, bunların nasıl kullanılacağına dair daha fazla araştırma yapılmasını gerektirir. Örneğin dizeleri ele alalım. Ekibinizin büyüklüğü, kullandığınız çeviri merkezi (varsa), VCS'den etkilenebilir (örneğin birleştirme çakışmalarını önlemek için) vb. Dizeleri birden çok dosyaya bölmeyi bile düşünebilirsiniz.
Başlamak için bir şey aradığınızı varsayıyorum. Bu yüzden bahsettiğim blog gönderisini tavsiye ederim. Yeni başlayanlar için iyidir ve kendi adlandırma kurallarınızı oluşturmak için kesinlikle ilham kaynağı olarak kullanabilirsiniz.
Ayrıca, bir proje büyüdükçe, birçok ihtiyaç ve gereksinimin zamanla değişebileceğini unutmayın. Bu nedenle başlangıçta uygun olan adlandırma kurallarının 2 yıl sonra uygun olmaması tamamen normaldir. Ve tamamen iyi. Geleceği tahmin etmeye çalışmamalısın. Sadece bir kongre seçin ve ona uyun. Size ve projenize uygun olup olmadığını göreceksiniz. Değilse neden uygun olmadığını düşünün ve başka bir şey kullanmaya başlayın.
Kaynaklarda kullanılan birkaç kural vardır:
Bu "layout_blah" kuralı başka birkaç yerde de kullanıldı. Örneğin, bir görünümün sahip olabileceği çekilebilir durumlar olan "state_blah" özellikleri vardır.
Ayrıca bu iki kural nedeniyle (dosyalar için alt çizgi_separated, bildirilen kaynaklar için mixedCase), bir dizi tutarsızlık bulacaksınız. Örneğin renkler, dosyalarla veya açık değerler olarak bildirilebilir. Genelde hepsine altçizgi_sırtı ile bağlı kalmak isteriz, ancak bu her zaman olmaz.
Sonuçta, kaynaklar için adlandırma kuralları konusunda fazla endişelenmiyoruz. Tutarlı tuttuğumuz en büyük özellik, öznitelikler için "mixedCase" ve düzen parametresi özniteliklerini tanımlamak için "düzen_blah" kullanımıdır.
Ayrıca buradaki kamu kaynaklarına göz atmak, sözleşmeler için iyi bir fikir vermelidir:
http://developer.android.com/reference/android/R.html
Özniteliklerin tamamen tutarlı olduğunu göreceksiniz (düzen_ kuralını anladığınız sürece), tüm çekilebilir öğeler alt çizgi_ ayrıldı, vb.
Bu, herhangi bir dil veya çerçeve için ortak bir sorundur, ancak ayrılmış kelimelerden kaçındığınız sürece, bir şeylere ne dediğini hatırlayabildiğinizi varsayarsak sorun olmaz.
Android'in xml kaynak dosya adlarına bir sınırlama koyduğunu ancak alt çizgilerin uygun göründüğünü not ettim. ADT aslında belirtir
Dosya tabanlı kaynak adları yalnızca küçük harf az, 0-9 veya _ içermelidir.
İlk başta beni harekete geçiren bir şey, kimliklere sahip ad alanlarının eksikliğiydi, ancak bu genellikle göz ardı edilebilir, eğer iki kimliğiniz varsa, aynı Android yalnızca tanımlanan kimliği yeniden kullanır.
İd'ler için 3 harfli niteleyici ve ardından deve notasyonunda ifade ettiği şeyi kullanıyorum, örneğin statik bir metin etiketi (veya metin görünümü) için lblFoo, düzenlenebilir bir metin kutusu için txtFoo (Android'de edittext). Bu ilk bakışta tuhaf görünebilir ama bunu VB6'dan beri kullanıyorum ve bu kontrollere etiket ve metin kutusu deniyordu.
İşte sık kullandığım birkaç tane daha:
Aynı şeyi java dosyasında da kodda kullanıyorum, bu yüzden düşünmek zorunda kalmıyorum, paket kapsamı buna oldukça mutlu bir şekilde izin verecek:
Button btnFoo = (Button)findViewById(R.id.btnFoo);
Alt çizgi kullanarak biraz boşluk eklemeyi tercih ederseniz, yani btn_foo ... Eski alışkanlıklarımı bozabilseydim, muhtemelen bunu yapardım.
Bunları kısaltmanın ideal olmayabileceğini ve sadık kişilerin tam adın kullanılması gerektiğini savunabileceklerini, ancak düzinelerce kontrolü adlandırdığınızda ve farklı sistemler ve çerçeveler arasında geçiş yaptığınızda, tam adlar anlamlarını yitirir. bunları VB, C ++, ASP.NET, WinForms in C # ve VB.NET, Android ve Python'da on yılı aşkın süredir kullanmaktadır. Android'in ona metin kutusu mu yoksa edittext mi dediğini asla hatırlamama gerek yok. Bilmem gereken tek şey lblFoo'nun statik etiket olduğu ve txtFoo'nun kullanıcının girdi yazdığı şey olduğu.
Son bir not, önemli şeylere hangi kurala karar verirseniz verin, denetimleri doğru ve tutarlı bir şekilde adlandırmaktır, böylece belirsiz varsayılan id'ler, örneğin TextView5 veya farklı kuralların bir karışımı ile uğraşmazsınız.
Tasarımcı ve geliştiriciler için faydalı bağlantı - burada
Boyutlar ve boyutlar, adlandırma kuralları, stiller ve temalar, dokuz yama vb.
Google tarafından desteklenen herhangi bir standart kongre olduğunu sanmıyorum. Farklı resmi Google uygulamalarında bile, insanların bir şeyleri adlandırmanın her türlü yolunu gördüm.
Bir dizin hiyerarşisinde 100 mizanpaj (veya çekilebilir öğeler, menüler, vb.) Dosyalarını anlamaya çalışırken size en çok yardımcı olan şey ne olursa olsun.
Kısa bir cevap: Android geliştiricilerinden bir şeyler öğrenmek istiyorsanız, iyi bir örnek destek kitaplığı v7'dir ( https://dl-ssl.google.com/android/repository/support_r21.zip )
Aksi takdirde, kaynakları adlandırmak için düşündüklerim:
1. kod yazarken kaynakları kolayca bulmak
2. kodu okurken kaynakları kolayca anlamak
3. isimleri çevirmenler için kullanışlı hale getirmek ( R.string.*
yalnızca kaynaklar)
4. düzenleri yeniden kullanmak <include/>
( R.id.*
kaynak çakışmaları)
5. uğraşmak kütüphane projeleriyle
Mantıksal olarak, kaynakları düzenlemek, java sınıflarını paketler halinde gruplamaktan (veya dosyaları klasörlere koymaktan) farklı olmamalıdır. Ancak, Android kaynaklarının ad alanı olmadığından, aynısını elde etmek için kaynak adına önekler eklenmelidir (örneğin com.example.myapp.photo
olur com_example_myapp_photo
).
Uygulamayı, kaynak önekleri olarak kullanılabilecek kısa benzersiz adlarla ayrı bileşenlere (etkinlikler, parçalar, diyaloglar vb.) Bölmenizi öneririm. Bu şekilde, ilgili işlevselliğe sahip kaynakları birlikte grupluyoruz, bu da onları bulmayı kolaylaştırıyor (1. nokta) ve aynı zamanda hem <include/>
kitaplık projeleriyle (4. ve 5. maddeler) ad çatışmalarını önlüyoruz . Birden çok bileşende ortak olan kaynakların hala bir öneki olabileceğini unutmayın (örneğinR.string.myapp_ok_button
) .
Önekten sonra, ad bize kaynağın ne için kullanıldığını (gerçekleştirilecek eylem, görüntülenecek içerik vb.) Söylemelidir. İyi bir isim seçmek, anlamak için önemlidir (2. ve 3. maddeler).
Bazen "bileşen_adı" bize yeterli bilgi verir, bu özellikle tür zaten R sınıfı tarafından verilmişse doğrudur ( R.string.myapp_name_string
2. "dizge" de gereksizdir). Bununla birlikte, açıkça tür eklemek, anlayışı geliştirebilir (örneğin, çevirmenlerin bir tostu veya bir etiketi ayırt etmesine yardımcı olabilir). Bazen tür tabanlı filtrelemeye izin vermek için "ad" ve "tür" bölümleri değiştirilebilir (R.string.photo_menu_*
bize fotoğraf bileşeni için yalnızca menü ile ilgili öğeler verir).
Diyelim ki resim çekmek için bir aktivite yazıyoruz, class com.example.myapp.photo .PhotoActivity. Kaynaklarımız şöyle görünebilir ("fotoğraf" bileşenine göre gruplandırılmıştır):
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'in belgelerine bakarsanız, "en iyi uygulamalardan" çeşitli bahsedilir, ancak kesinlikle somut kurallar yoktur. Örneğin, Simge Tasarım Yönergelerinde Google, simgeleri "ic_" önekiyle adlandırmayı önerir.
Kaynak Sağlama , başlamak için iyi bir yer olabilir .
Ayrıca , Google geliştiricilerinin işleri nasıl yaptığını görmek istiyorsanız , SDK kaynağını / örneklerinin yanı sıra Android Developers Blog'unu da inceleyin.
Dizeler için sonraki adlandırma kurallarını kullanışlı buldum:
[<action>]_<object>_<purpose>
Örneğin, clear_playlist_text, delete_song_message, update_playlist_positivebutton_text. Ve buradaki "eylem" isteğe bağlıdır.
Burada bir fikir edinmek için kod stili için google belgelerini okuyabilirsiniz
Kimliklerin önüne "x" eklemem dışında genellikle kaynak kimlikleri için (dosyalar için değil) java adlandırma kurallarını izledim, örneğin:
<TextView android:id="@+id/xTvName" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
Java'da bunu basit kullanabiliriz (basit olarak da hatırlayabiliriz)
TextView mTvName=(TextView)findViewById(R.id.xTvName);
Burada mTvName (Genelde android önerilen adlandırma kurallarıdır) ve mizanpaj dosyasında android TextView ID'sinin (x XML anlamına gelir) bir parçası olarak adlandırılan xTvName, Buttons ve EditText gibi nesneleri görüntülemek için bu tür adlandırma kurallarını takip ettim.
XML IDS'de : xViewTypeSpecificName
Java'da: mViewTypeSpeficName
Yukarıdaki kurallar, karmaşık düzenler oluşturduğumda hayatımı kolaylaştırıyor. İsimlerinizi olabildiğince kısa tutmaya çalışın ve diğer ortak geliştiriciler için anlaşılabilir ve anlamlı olmaları daha iyidir (ancak her seferinde mümkün olmayabilir), Deneyimlerimin başkalarına yardımcı olacağını umuyorum, önerilerinizi bekliyoruz.
Android projelerimizde butonlar, etiketler, metin kutuları gibi birçok bileşen var. Örneğin "ad" gibi basit bir ad, "ad" ı tanımlamak için çok kafa karıştırıcıdır, etiket veya metin kutusu. Esas olarak, başka geliştiriciler tarafından geliştirilen projeleri sürdürürken olur.
Bu tür bir karışıklığı önlemek için, Buttons TextBoxes veya Labels için aşağıdaki adları kullandım
Misal :
btnName
labName
txtName
listName
Bu sizin için yardımcı olabilir.
Bazı kısıtlamalar var:
Bu arada, yönergelere uymanız veya standart koddan öğrenmeniz daha tavsiye edilir.