Какова наилучшая практика для именования идентификатора XML Element в Android?
Я не уверен, что кто-то был обеспокоен этой проблемой раньше, но для меня это одна большая боль.
Как вы указываете id для элемента xml в android?
В настоящее время я устанавливаю идентификатор с шаблоном [название деятельности/фрагмента] [тип элемента] [конкретное имя]. Например, если у меня есть EditText, чтобы сохранить электронное письмо, которое используется в LoginActivity, я дам id 'LoginEditTextEmail'.
Проблема, с которой я сталкиваюсь, заключается в том, что при таком подходе идентификатор часто заканчивается очень длинным.
Как вы устанавливаете идентификатор? Какова наилучшая практика?
Ответы
Ответ 1
Описательные имена являются идеальными (такими же, как с именем любой переменной на любом языке программирования).
Я думаю, что у вас есть хорошая система, я бы предложил эти потенциальные способы уменьшить размер ваших идентификаторов.
[название деятельности/фрагмента]. Лично я хотел бы отказаться от этого, поэтому я стараюсь использовать один файл макета для каждого действия/фрагмента, так что нет никакой путаницы в том, какую активность должен представлять вид. Также бывают случаи, когда я повторно использую некоторые виджеты View в нескольких действиях, и я оставлю их с одинаковым идентификатором, чтобы код для поиска и взаимодействия с ними был упрощен (т.е. Он может быть скопирован/вставлен или помещен в подкласс Activity )
[тип элемента]. Я использую сокращенную букву для типов виджетов:
- Edt = EditText
- Txt = TextView
- Lbl = TextView, статический для маркировки чего-либо
- Btn = Кнопка
- Prg = ProgressBar
- Lyt = Макет
- и т.д...
[конкретное имя] - никакого реального улучшения здесь не должно быть, оно должно быть до тех пор, пока оно должно описывать, для чего оно предназначено.
Ответ 2
Ты слишком странно себя чувствуешь. Просто назовите его каким-либо образом незабываемым для вас. Идентификаторы должны быть уникальными для каждого XML (т.е. Вы можете иметь 50 различных макетов с идентификатором my_edittext
), так как вы находите представление по его идентификатору только через единую иерархию представлений.
Ответ 3
Во многом как именование чего-либо, я стараюсь использовать кратчайшее имя, которое можно точно описать. В случае идентификаторов для макетов просто убедитесь, что каждый идентификатор уникален в вашем макете (вы можете повторно использовать один и тот же идентификатор в другом макете).
Ответ 4
Отбросьте фрагмент, активность и тип, если вы не квалифицируете их в кодировке, поэтому:
boolean isLoggedIn = false;
android:id="@+id/is_logged_in"
Как упоминалось в других ответах, XML предоставляет квалификатор, теперь вам нужно решить, нужна ли согласованность и/или дальнейшая квалификация, и если это подходит. Вам действительно нужно квалифицироваться, и если вы не поддерживаете код, который будет намного сложнее вами или кем-то еще?
Так что насчет strings.xml
?
префикс id с фрагментом или квалификатором активности. Итак, например:
<string name="profile_is_logged_in_true">Logged in.</string>
<string name="profile_is_logged_in_false">Not logged in.%</string>
Также & hellip;
<plurals name="plural_is_logged_in_duration">...
Я играл с с помощью
<string name="profile_isloggedin_false">Not logged in.</string>
Но еще не убежден. Это на самом деле проблема классификации, теперь с тех пор, как она была решена в других дисциплинах путем пометки. Java предоставляет точечные пространства имен и классификаторы типов, поэтому
com.example.android.app.profile.State.isLoggedIn
Android использует такие вещи, как R.string
:-) Итак, у вас есть Java плюс некоторое дополнительное пространство имен от Android. Не забывайте, что у вас может быть несколько файлов с строковыми ресурсами, поэтому, возможно,
res/values/widget_defaults.xml
может содержать некоторые значения по умолчанию, например a TextView
. Истинные и ложные строки должны обрабатываться множественными числами, но пример, надеюсь, помогает, несмотря на то, что он надуман.