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

问题描述 投票:80回答:9

我目前正在为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" />

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

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

谢谢

android mobile
9个回答
82
投票

如果您使用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);

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


13
投票

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


10
投票

我认为他在讨论xml文件中的id。

e.g:

android:id="@+id/home_button"

android:id="@+id/HomeButton"

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


4
投票

我认为如果我们使用带下划线的所有小写字母是好的。

看看这个(添加到丹尼尔回答的内容)

  // Camel Case
    TextView tvUserName = (TextView) findViewById(R.id.tvUserName);
    // Small Caps and Underscores
    TextView tvUserName = (TextView) findViewById(R.id.tv_user_name);

根据我自己的经验,我倾向于对xml中的camel case约定感到有些困惑,因为当你将它链接到也使用camel case的Java时(因为它是标准的)它看起来像一个doppleganger。


4
投票

如果你看一些Googles应用程序示例,例如:

https://github.com/google/iosched

他们使用下划线。所以....也许这就是我们应该怎么做的?


1
投票

xml文件名(在drawable文件夹中使用的文件名)必须全部用小写字母_分隔,因为xml不支持大写文件名。


1
投票

我认为如果我们在xml文件中使用下划线约定和类字段的camel case约定,那么它将为每个开发人员提供更好的可见性,以区分xml id和类字段。


0
投票

如果Android的编译器真正做你所说的限制驼峰的情况(这似乎很奇怪),那么你应该坚持已建立的约定。

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


0
投票
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));

首先,没有一定的标准来定义哪一个更有效,但我有几个理由证明这一点。我的想法是合理的,保持XML id和java变量与camel-case约定完全相同的名称。

  1. 通过在XML和Java端搜索项目很容易到达变量。
  2. butterKnife库定义 @BindView(R.id.infoTextView)TextViewFont infoTextView;

以这种方式保持更合适。

© www.soinside.com 2019 - 2024. All rights reserved.