什么样的ID名称约定是好的Kotlin android扩展
使用Kotin android extensions我可以避免使用findViewById
,但 我不知道如何命名ID来使用它的属性。什么样的ID名称约定是好的Kotlin android扩展
我发现了两个选项:
- 使用IDS 简单的名称,但然后我可以在咖啡遇到麻烦,如果我与片段使用它:
android.support .test.espresso.AmbiguousViewMatcherException:'与id:.../mainLayout'匹配层次结构中的多个视图。
这是因为我有相同ID的TabLayout内两个片段:
<LinearLayout android:id="@+id/mainLayout"
- 名称与所有者:
"@+id/loginMainLayout"
和"@+id/signUpMainLayout"
但那么我将不得不使用像signUpMainLayout.doSomething()
这样的变量。
注意:我不喜欢在这种情况下使用
_
,因为这不是一个好的code style。
还有什么其他的选择?
我不明白为什么不使用"@+id/loginMainLayout"
和"@+id/signUpMainLayout"
当名称在lowerCamelCase
这是在kotlin和java中很常见。正如你所说的,用例将是signUpMainLayout.doSomething()
。
无论如何这是一个很好的做法,在整个应用程序中使用id的唯一名称。这不是因为Espresso的缘故,而是主要是在看到ID的名称时知道与ID相关的视图。如果你使用这种风格并不难。 例子:
在fragment_contacts
:
<TextView id="+id/contactNameText
android:text="John Smith" .../>
<ImageView id="+id/contactUserImage .../>
断言:存在contactUserImage
Image
,因为知道这是一个ImageView的。
在fragment_settings
:
<TextView id="+id/settingsNotificationText
android:text="Turn notifications on/off" .../>
<checkBox id="+id/settingsNotificationCheck .../>
我不喜欢这个想法是,代码变得巨大使用这些变量,考虑像'activity_expert_profile'这样的视图是你的用户是“专家”(你可能会为其他人“activity_normal_profile”),然后,一个用户名TextView可能被称为'expertProfileUserNameTextView',你可以看到变量名是ultra BIG,这正是让我感觉不好的原因。 – Caipivara
,我一直在用这个约定https://jeroenmols.com/blog/2016/03/07/resourcenaming/, 工作,但没有下划线和骆驼案件约定。
如果你注意到当你将一个控件拖到一个视图中,在android studio中,它使用camel case约定来命名该id。
虽然变量的名称可能有点大,但您始终可以在变量的声明中使用val或var。
关于
我没有看到不使用'_'的原因?你的ref代码样式是为java编写的,但我们的布局文件是xml –
@TrungLe带有kotlin扩展名,它们用你的id的名称创建扩展函数来引用视图,所以代码将充满'username_textfield.text =“这个文本“'看起来完全没有java/kotlin代码样式。 – Caipivara