Android id命名约定:小写加下划线vs.驼峰大小写

Android id命名约定:小写加下划线vs.驼峰大小写,android,mobile,Android,Mobile,我目前正在为Android编写一个应用程序。现在我发现,您不能将资源对象(例如图像)放在drawable文件夹中,并将其命名为“myTestImage.jpg”。这将给您一个编译器错误,因为不允许使用驼峰大小写语法,所以您必须将其重命名为“my_test_image.jpg” 但是您在XML文件中定义的ID呢。假设你有以下定义 <TextView android:id="@+id/myTextViewFirstname" android:layout_width

我目前正在为Android编写一个应用程序。现在我发现,您不能将资源对象(例如图像)放在drawable文件夹中,并将其命名为“myTestImage.jpg”。这将给您一个编译器错误,因为不允许使用驼峰大小写语法,所以您必须将其重命名为“my_test_image.jpg”

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

<TextView android:id="@+id/myTextViewFirstname"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Firstname" />

这是一个有效的定义,在我的Android emulator上编译并运行得很好,不过正如您所看到的,我用驼峰式语法指定id

现在,Android示例总是使用小写和下划线。这只是一种命名约定,在id中使用小写加下划线,还是会在实际设备上造成问题


Thx

如果Android的编译器真的按照你说的做了(这看起来很奇怪),那么你应该坚持既定的惯例

违反规则只会造成不必要的混乱。
尽可能在所有地方保持一致。

如果您使用驼峰案例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);

一、 我也想知道这里的标准。谷歌的例子前后矛盾;有时它们使用全小写,有时插入下划线,有时使用驼峰大小写。

xml文件名(可绘制文件夹中使用的文件名)必须用下划线字符分隔所有小写字母,因为xml中不支持大写文件名。

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

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


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

如果您查看
android.R.id.
字段,您会注意到它们都是驼峰大小写的。所以如果android ID是用驼峰式写的,我想我们必须遵循这个约定:)

我认为如果我们在xml文件中使用下划线约定来表示id,在类字段中使用驼峰式约定来表示id,那么每个开发人员都可以更好地区分xml id和类字段。

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

他们使用下划线。所以也许我们应该这样做

android:id="@+id/frag_account_button"
frag_account_button = ((ListView)view.findViewById(R.id.frag_account_button));

android:id="@+id/fragAccountButton"
fragAccountButton = ((ListView)view.findViewById(R.id.fragAccountButton));
首先,没有确定的标准来定义哪一个更合适,但我有自己的想法。 我的想法是,使用camel case约定,将XML id和java变量保持在完全相同的名称中是合理的

  • 通过搜索XML和java端的项目,很容易找到变量

  • butterKnife库定义

    <TextView android:id="@+id/myTextViewFirstname"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Firstname" />
    
    @BindView(R.id.infoTextView) 文本视图字体信息文本视图


  • 这样说更合适。

    你可能误解了我的意思。如果您将资源像文件一样放入,并以驼峰格式写入,编译器会抱怨。但是,另一种情况是在XML布局文件中指定ID。在这里,您可以放置camel case id名称,并且模拟器可以正常工作。正如我所提到的,谷歌的样本都是以我的id名称的形式出现的,但是还有很多其他的样本都有驼峰案例id名称……是的,这正是我的问题。它们迫使您对布局使用带下划线的命名约定,而您可以对引用XML布局定义中的控件/小部件的ID使用驼峰大小写或带下划线的命名约定。谷歌应该在这里定义一些标准(如果他们还没有,至少我没有发现任何东西)。因此,无论您引用的是布局还是id引用的字段,在整个应用程序中,采用一种方法肯定是保持一致的最佳方法。出于好奇:您是否有一个Google不一致的链接,这意味着他们在哪里对id使用了驼峰式符号?为了进一步混淆,样式名称(类似于样式的id)在项目模板中,使用PascalCase,例如
    AppBaseTheme
    AppTheme
    。在我参与的团队中,下划线方法通常被认为可读性较差。camelCase中不允许使用资源文件名这一有点奇怪的限制不应该影响您对其余Java接口的思考-camelCase是根深蒂固的,我不认为任何人会感谢您在命名约定中强制使用新的“u”样式。@RichardRiley我觉得这很有趣,与下划线一样,单词边界是正确定义的,而使用驼峰大小写时,单词边界是压缩在一起的,因此与驼峰大小写的名称相比,我更容易解析下划线分隔的名称。这与文件名无关,而且,有些人不喜欢在使用驼峰式大小写时大写第一个字母。在我看来,这是一个奇怪的不一致的问题。你不能区分大小写,不,但是为什么不在同一目录中禁止具有相同名称根组件的资源文件呢。(顺便说一句,这是关于文件名与资源ID的:重新检查OP)这是非常主观的,并不能回答为什么不能像ID字符串那样对资源文件进行类似命名的问题。它们在camelCase中,因为它们是在camelCase中创建的。这并没有为整个社区树立任何编码风格的先例,也没有与原始海报所要求的资源文件和ID字符串的命名约定相联系。是的,它们是在camel case中创建的。但是这些ID来自android API本身,所以如果
    android:id="@+id/frag_account_button"
    frag_account_button = ((ListView)view.findViewById(R.id.frag_account_button));
    
    android:id="@+id/fragAccountButton"
    fragAccountButton = ((ListView)view.findViewById(R.id.fragAccountButton));