Android id命名约定:带有下划线与驼峰情况的小写

Jur*_*uri 85 mobile android

我目前正在为Android编写应用程序.现在我发现你不能将资源对象放在drawable文件夹中,并将其命名为"myTestImage.jpg".这会给你一个编译器错误,因为不允许使用camel case语法,所以你必须像"my_test_image.jpg"那样重命名它.

但是你在XML文件中定义的id呢?假设您有以下定义

<TextView android:id="@+id/myTextViewFirstname"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Firstname" />
Run Code Online (Sandbox Code Playgroud)

这是一个有效的定义,在我的Android模拟器上编译和工作正常,尽管 - 如你所见 - 我在驼峰案例语法中指定了id.

现在,Android示例始终使用小写和下划线.这只是一个命名约定,使用带有下划线的小写的id或者它可能会导致真实设备出现问题吗?

谢谢

Dan*_*Lew 84

如果您使用camel-case id名称,设备不会抱怨.对于我的第一个应用程序,我在camel-case中编写了所有id,因为我认为它在Java代码中看起来更好,并且它工作得很好.

不过,我正在慢慢改变我对camel-case的看法,因为你最终得到了两种不同的命名约定 - 例如:

// 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);
Run Code Online (Sandbox Code Playgroud)

我也对这里的标准感到好奇.谷歌的例子不一致; 有时他们使用全部小写,有时他们插入下划线,有时他们使用驼峰式.

  • 是的,这正是我的问题.它们强制您对布局使用强调的命名约定,而您可以使用驼峰式或下划线来引用XML布局定义中的控件/窗口小部件.Google应该在这里定义一些标准(如果它们还没有,至少我没有找到任何东西).因此,无论您是引用布局还是引用id字段,一种方式都可以确保在整个应用程序中保持一致. (16认同)
  • 为了进一步混淆,项目模板中的样式名称(类似于样式的ID)使用PascalCase,例如`AppBaseTheme`和`AppTheme`. (6认同)
  • 在我参与的团队中,通常认为下划线方法的可读性要低得多.资源文件名称的某些奇怪限制不允许出现在驼峰的情况下,不应该污染您对其余Java接口的想法 - camelCase是坚定地根深蒂固,我不认为有人会感谢你在命名约定中强迫新的"_"风格. (4认同)
  • @RichardRiley我发现这很有意思,就像下划线一样,单词边界是正确定义的,而在驼峰的情况下,它们会被挤压在一起,所以我更容易解析下划线分隔的名字,而不是像驼峰的名字. (2认同)

Kir*_*rov 13

如果你看看android.R.id.*字段,你会注意到它们都是驼峰式的.所以如果android ids是用camel-case编写的,我想我们必须遵循这个惯例:)

  • 在`android.R.id.*`字段中也有`widget_frame`字段[http://developer.android.com/reference/android/R.id.html#widget_frame].在这个领域谷歌使用下划线而不是camel-case所以你的结论有关驼峰式约定是正确选择ID约定可能是假的 (8认同)
  • 是的,它们是用驼峰式的.但这些ID来自android API本身,所以如果API的创建者使用了驼峰的情况,我想这是遵循他的约定的好方法. (3认同)

小智 10

我认为他在谈论xml文件中的ID .

例如:

android:id="@+id/home_button"
Run Code Online (Sandbox Code Playgroud)

android:id="@+id/HomeButton"
Run Code Online (Sandbox Code Playgroud)

我没有在这个问题上找到任何约定或指南,所以我的项目中的开发人员都不明显地使用这两种方法,这是非常痛苦的:(

  • 事实上,这里没有"官方"指南,但我肯定会为我正在进行的每个项目建立一个...它与一般的命名约定基本相同 (2认同)

小智 6

我认为最好使用带下划线的所有小写字母。

看看这个(加上丹尼尔的回答)

  // Camel Case
    TextView tvUserName = (TextView) findViewById(R.id.tvUserName);
Run Code Online (Sandbox Code Playgroud)
    // Small Caps and Underscores
    TextView tvUserName = (TextView) findViewById(R.id.tv_user_name);
Run Code Online (Sandbox Code Playgroud)

根据我自己的经验,我倾向于对 xml 中的驼峰大小写约定感到有些困惑,因为当您将它链接到也使用驼峰大小写的 Java 时(因为它是标准),它看起来像是一个多普勒格。

  • 这是非常主观的,并没有回答为什么你不能像 ID 字符串那样命名资源文件。 (2认同)

Mic*_*cro 5

如果您查看一些 Google 应用程序示例,例如:

https://github.com/google/iosched

他们使用下划线。那么...也许我们应该这样做?