Android-Namenskonvention

81

Ich suche nach einem gründlichen Vorschlag für eine Android-Namenskonvention. Ich habe hier ein bisschen gefunden:

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

was sagt:

  • Nicht öffentliche, nicht statische Feldnamen beginnen mit m.
  • Statische Feldnamen beginnen mit s.
  • Andere Felder beginnen mit einem Kleinbuchstaben.
  • Öffentliche statische Endfelder (Konstanten) sind ALL_CAPS_WITH_UNDERSCORES.

Dennoch suche ich etwas viel umfangreicheres, das alle Aspekte von Android abdeckt:

  • wie man Layouts und Ansichten innerhalb benennt,
  • wie man Menüs benennt
  • wie man Stile benennt
  • wie man Datenbanktabellen (Singular, Plural) und Felder innerhalb benennt
  • usw

Wenn es einen allgemein akzeptierten Vorschlag gibt, würde ich dem einfach gerne folgen. Alle SDKs scheinen ihren eigenen Weg zu gehen, daher bin ich besonders an der Android-Methode interessiert.

Dorjeduck
quelle
1
Da dies der erste Treffer in Google ist, dachte ich, ich würde hinzufügen, dass Sie durch die Verwendung von "refactor" in Android-Studio und Eclipse etwas umbenennen und alle Vorkommen ändern können. Dies war für mich nützlich, da ich bei der Benennung von Konventionen wählerisch bin. daher meine Suche. Es ist super einfach, diese bestimmte Instanz umzubenennen und einfach weiterzumachen.
Eric Anthony
Ignorieren Sie den Google-Codierungsstil, er wird nicht genug erklärt ... und nicht einmal eine vollständige Konv. Es gibt KEINE internationale Kodierungskonv., Da jedes Unternehmen / jede Gruppe ihre eigene Kodierungskonv. Hat. Verwenden Sie Ihre eigenen.
Yousha Aleayoub

Antworten:

88

Die Android-Richtlinien von ribot sind ein gutes Beispiel für Standard-Namenskonventionen:

Namenskonvention für XML-Dateien:

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

Namenskonvention für Komponente / Widget in XML-Dateien:

Alle Komponenten für die X - Aktivität muss mit dem Aktivitätsnamen beginnen alle Komponenten sollten Präfix oder Kurznamen wie haben BTN für Button wie folgt beispielsweise Name für die Anmeldung Aktivität Komponente sein sollte.

activity_login_btn_login
activity_login_et_username
activity_login_et_password

Kurzname der Hauptkomponenten:

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
Pravin Bhosale
quelle
6
tut es nicht wirklich metter tut es .. solange Sie (oder alle Ihre Firma) Adpot 1 Stil, wen interessiert es, woher es kommt. Ich habe bisher 4 mehr oder weniger einfache Android-Apps erstellt und mir fast die gleiche Konvention wie diese gemacht. Ich denke es ist alles was du brauchst. Ich benutze 'a_' anstelle von 'Aktivität' und so weiter, da es zu lang ist lol
Srneczek
Muss der Name der Komponenten wirklich mit dem Namen der Aktivität beginnen? Ich meine, Sie würden sich sowieso auf die Namen in der jeweiligen Layoutdatei beziehen.
Szedjani
1
Es ist nicht wirklich notwendig, aber wenn Ihr Projekt zu dieser Zeit wächst, wird dies sehr hilfreich sein
Pravin Bhosale
5
MainActivity + activity_main? Ich weiß, das ist der Standard, aber wer hat das erfunden? Am unauffälligsten, besonders warum die Namen länger werden, wenn Fragmente an ihren Platz kommen.
Brainstray
Persönlich finde ich das nicht sehr konsequent
Jethro
28

Dies ist eine hervorragende Sammlung von Best Practices für den Anfang: https://github.com/futurice/android-best-practices

Folgendes benutze ich. Ich werde auch von diesem Link kopieren.

Objektbenennung

  • Verwenden Sie das Präfix moder nicht sgemäß den Google-Richtlinien. Ich habe jahrelang aufgehört und finde es ohne sie einfacher. Die IDE informiert Sie, wenn Sie etwas Privates oder Statisches verwenden. es scheint eine veraltete Konvention zu sein.
  • KONSTANTEN beginnen mit Kappen
  • Akronyme sollten nur den ersten Buchstaben groß schreiben. Zum Beispiel functionUrlund unitId. Nicht unitID.
  • Präfix mit dem Objekttyp. Zum Beispiel wäre eine TextView, die einen Namen enthält tvName. Eine EditView mit einem Passwort wäre etPass.
  • Wenn es etwas ist, das normalerweise nur einmal in einer Aktivität verwendet wird (z. B. ListView), haben Sie keine Angst, es einfach aufzurufen lv.
  • Wenn es sich nicht um einen Objekttyp handelt, benennen Sie ihn einfach nach seiner Funktion. Wenn es sich beispielsweise um eine Zeichenfolge handelt, die die ID enthält, benennen Sie sie als idstringId. Die IDE zeigt an, wann es sich um einen String, einen Float oder einen Long handelt.
  • Halten Sie es lesbar. Verwenden Sie so etwas wie Passanstelle von Password.
  • Innerhalb des XML sollte der Name ohne Großbuchstaben unterstrichen werden, z. B. tv_nameundet_pass
  • Fügen Sie das android:idals erstes Attribut in das XML ein.

Dateinamen

  • Präfix-Layouts mit dem Typ, der es ist. Zum Beispiel fragment_contact_details.xml, view_primary_button.xml, activity_main.xml.
  • Kategorisieren Sie die Klassen in Ordner, verwenden Sie jedoch Suffixe. Zum Beispiel /activities/MainActivity.javaoder /fragments/DeleteDialog.java. Meine Ordner sind Aktivitäten, Fragmente, Adapter, Modelle und Dienstprogramme .
  • Adapter sollten angeben, wie und wann sie verwendet werden. Daher könnte ein ListView-Adapter für ChatActivity aufgerufen werden ChatListAdapter.

Farben.xml und Dimens.xml als Palette

  • Verwenden Sie für Farbe Namen wie gray_light, nicht button_foreground.

  • Verwenden Sie für Dimensionen Namen wie spacing_large, nicht button_upper_padding.

  • Wenn Sie etwas Spezielles für Ihre Schaltflächenfarbe oder Ihren Abstand festlegen möchten, verwenden Sie eine Stildatei.

string.xml

  • Benennen Sie Ihre Zeichenfolgen mit Schlüsseln, die Namespaces ähneln, und haben Sie keine Angst, einen Wert für zwei oder mehr Schlüssel zu wiederholen.

  • Verwenden Sie error.message.networknicht network_error.

Argumentation

Der Zweck von Namenskonventionen besteht nicht darin, alles ordentlich und konsistent zu machen . Es ist da, um mögliche Fehler zu kennzeichnen und den Workflow zu verbessern. Die meisten davon sind für Tastaturkürzel geeignet. Versuchen Sie, sich darauf zu konzentrieren, Fehler zu minimieren und den Workflow zu verbessern, anstatt gut auszusehen.

Präfixe eignen sich hervorragend für "Wie heißt diese Textansicht?" Momente.

Suffixe gibt es für die Dinge, auf die Sie auf diese Weise nicht so oft zugreifen, die aber verwirrend sein können. Beispielsweise kann ich nicht sicher sein, ob ich meinen Code in die Aktivität, das Fragment oder den Adapter dieser Seite eingefügt habe. Sie können fallen gelassen werden, wenn Sie möchten.

XML-IDs werden häufig in Kleinbuchstaben geschrieben und verwenden Unterstriche, nur weil jeder dies auf diese Weise zu tun scheint.

Muz
quelle
Was ist mit den Namen der Klassen? zB: ActivityMainoder MainActivity. Welches würdest du empfehlen? Ich denke, es macht Sinn, vorbei zu gehen: KLASSE : NameActivity, LAYOUT : name_activity, KOMPONENTE : nameactivity_component_name. Ein Beispiel hierfür wäre MainActivity, main_activity, mainactivity_btn_cancel
Jethro
4
Ich benutze das Präfix m und s. Ich fand es sehr nützlich und es macht den Code sicher nicht schlechter. Außerdem ziehe ich es manchmal vor, eine Datei ohne die IDE zu öffnen. Es ist sehr einfach, Felder und einfache Variablen zu unterscheiden.
Arkadiusz Cieśliński
Ich schaue mir gerade das Camera2-Beispiel an, und es ist mir wirklich egal, woher mBackgroundHandlerusw. kommt. Wenn Sie sie benennen, werden backgroundHandlerdie wichtigen Informationen links angezeigt . Wenn Sie es benötigen, können Sie durch Hinzufügen eines Suffixes zu Parametern und eines Suffixes für lokale Variablen die Unterstriche visuell und mental überspringen, es sei denn, Sie müssen sich auf sie konzentrieren.
WillC
12

KONSISTENZ
Jeder (außer in Teams) hat seine eigene Konvention und welche Sie wählen, spielt keine Rolle. Es ist wichtig, sicherzustellen, dass es in der gesamten Anwendung konsistent ist .


STRUKTUR
Persönlich verwende ich eine Namenskonvention wie diese, da sie vom Klassennamen bis zur Komponente reicht und in der gesamten XML-Datei konsistent ist:

  • KLASSE :<ClassName>
  • AKTIVITÄT :<ClassName>**Activity**
  • LAYOUT :classname_activity
  • KOMPONENTEN-IDS :classname_activity_component_name

Ein Beispiel hierfür wäre OrderActivity.class, order_activity.xml, order_activity_bn_cancel. Beachten Sie, dass das gesamte XML in Kleinbuchstaben geschrieben ist.


ABKÜRZUNG VON LAYOUTS
Wenn Sie kürzere Namen verwenden möchten, um den Code aufgeräumter zu halten; Dann kann eine andere Methode darin bestehen, ALLE Namen in XML sowie die Layouts abzukürzen.

Ein Beispiel hierfür wäre OrderActivity .class: ord_act .xml, ord_act _bt_can, ord_act _ti_nam, ord_act _tv_nam. Ich zerlege die Namen in drei, aber das hängt davon ab, wie viele ähnliche Namen Sie haben


ABKÜRZEN VON KOMPONENTENTYPEN
Wenn Sie Komponententypen abkürzen, versuchen Sie, diese ebenfalls konsistent zu halten. Normalerweise verwende ich zwei Buchstaben für den Komponententyp und drei Buchstaben für den Namen. Manchmal ist der Name jedoch nicht erforderlich, wenn dies das einzige Element dieses Typs im Layout ist. Das Prinzip der ID soll eindeutig sein

  • KOMPONENTEN-IDS :nam_act_component_nam

ABKÜRZUNGEN DES KOMPONENTENTYPS (Diese Liste enthält zwei Buchstaben, die reichlich sind)
Rahmenlayout: fl
Lineares Layout: ll
Tabellenlayout: tl
Tabellenzeile: tr
Gitterlayout: gl
Relatives Layout: rl

Textansicht: tv
Button: bt
Kontrollkästchen: cb
Schalter: sw
Toggle Button: tb
Bild Button: ib
Bildansicht: iv
Progress Bar: pb
Bar Seek: sb
Bewertung Bar: rb
Spinner: sp
WebView: wv
Text bearbeiten: et

Radio Group: rg
Listenansicht: lv
Grid View: gv
Erweiterbare Listenansicht: el
Scroll - Ansicht: sv
Horizontal Scroll - Ansicht: hs
Suche: * se
Tab Host: th
Video ansehen: vv
Dialer Filter: df

Include: ic
Fragment: fr
Benutzerdefinierte Ansicht (andere): cv

Jethro
quelle
2
Optionsfeld = Bewertungsleiste?
Mitch
8

Ich glaube, dafür gibt es noch keine Konvention. Jedes Unternehmen hat seine eigenen Regeln und ich denke, niemand kümmert sich hier viel darum.

Für mich ziehe ich es vor, den Namen an den Kontext zu binden. Wenn es beispielsweise eine Aktivität mit dem Namen "MainActivity" gibt, lautet der Layoutname "main_activity.xml". Für jede dieser Aktivität zugeordnete Ressource füge ich ein Präfix "main_activity" hinzu, damit ich weiß, dass sie verwendet wird. Gleiches gilt für die für diese Aktivität verwendeten IDs.

Der Grund, warum ich diese Namen verwende, ist, dass es einfacher ist, sie zu finden, bei Bedarf zu löschen und sie nicht durch andere zu ersetzen, wenn Sie Android-Bibliotheken verwenden, da die Namen ziemlich eindeutig sind.

Ich versuche auch so viel wie möglich, aussagekräftige Namen zu vergeben, sodass Sie normalerweise nicht "listView" oder "imageView2" als IDs sehen, sondern so etwas wie "contactListView" und "contactImageView". Der gleiche Name (oder ähnlich) würde auch mit den Variablen im Java-Code übereinstimmen, um das Auffinden zu erleichtern.

Kurz gesagt, meine Tipps sind:

  • Versuchen Sie, Zahlen in den Namen zu vermeiden. Sie bedeuten normalerweise nicht viel und zeigen, dass Sie Drag & Drop nur für den UI-Designer verwendet haben.

  • Machen Sie sich bei Demos, POCs und Fragen hier keine Gedanken über die Benennung.

  • Versuchen Sie, allen Namen der Ressourcen (einschließlich der IDs) ein Präfix hinzuzufügen, um anzuzeigen, zu welchem ​​Kontext sie gehören, und um eine Eindeutigkeit zu erzielen.

  • Geben Sie nach Möglichkeit aussagekräftige Namen.

Android-Entwickler
quelle
2

Die neuesten Android Eclipse-Plugins erstellen einige der Dateien, die Sie beim Erstellen eines neuen Projekts automatisch erwähnen. Daher ist die Benennung ungefähr so:

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

Ich folgte diesem Schema mit z

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

Es ist also so etwas wie bei Paketnamen, von allgemein bis detailliert. Es ermöglicht auch eine saubere Sortierung.

Lächerlich
quelle
1

Jeder Körper verwendet seine eigenen. Das Hauptziel ist es, Fehler und Fehlinterpretationen zu vermeiden, insbesondere wenn andere Ihren Code lesen. Obwohl die Syntaxhervorhebung und die automatische Codeüberprüfung in modernen IDEs weniger sinnvoll sind.

Diese Namenskonventionen machen es jedoch auch sehr praktisch, wenn die Code-Vervollständigung aktiviert ist. Wenn Sie beispielsweise nur eingeben mund automatisch vervollständigen, wird eine Liste der Klassenfelder angezeigt.

Aber oft muss man mit dem Code anderer arbeiten, der eine solche Konvention nicht verwendet. Solche geschützten Variablen und überschriebenen Methodenparameter tragen nur zur Verwirrung bei.

Einige Beispiele:

  • Stellen Sie Klassenvariablen m voran und machen Sie statische Endvariablen zu Großbuchstaben mit _trennenden Wörtern. Stellen Sie keine Variablen für Variablen mit niedrigerem Gültigkeitsbereich voran.

  • Name Layout nach den UI Eltern, zum Beispiel act_main.xml, frg_detail.xml, itm__act_main__list1.xml; für eine Aktivität MainActivityein Fragment bzw. DetailFragmentein Elementlayout für ein ListViewIn MainActivitymit ID list1.

  • Namenselement- lsv__act_main__list1IDs in XML-Layouts wie: für eine ListView und btn__act_main__submitfür ein `Button-Element. Dies macht es viel einfacher, sie mit der automatischen Vervollständigung zu finden.

SD
quelle
thx - für mich sind Codierungskonventionen im Zeitalter der leistungsstarken IDE nicht wirklich sinnlos, nur meine
Einstellung
Das ist gut. Sie haben auch andere Vorteile: Sie sehen die ID einer UI-Ansicht in LogCat und anhand der ID wissen Sie, was es ist und wo Sie im Code danach suchen müssen.
SD
Ich würde für die Präfixe mit voll qualifizierten Namen gehen: activit_main.xml, fragment_main.xml, button_activity_main_submit.xmletc.
Ramón García-Pérez