为什么Android布局文件名如此有限?

时间:2010-06-24 22:30:11

标签: android file names

在文件名中保持一致是很好的。

MyActivity.java包含公共类MyActivity

我希望将xml文件及其布局称为res / layout / MyActivity.xml

但是我收到一条错误消息“无效的文件名:必须只包含[a-z0-9 _。]”

所以有两个问题:

  1. 为什么字符集如此有限(甚至不是大写?来吧!) - 啊 - 这种限制可能已经存在,所以你永远不会被不区分上层和下层的文件系统搞砸小写,就像Apple的HFS +(虽然参见维基百科的血腥故事http://en.wikipedia.org/wiki/Comparison_of_file_systems#cite_note-note-35-77

  2. 哪些文件名受限制 - 所有res?只是res / layout? res / layout加上其他一些文件夹?

  3. 任何人都可以确认1,并提供2的详细信息吗?

    谢谢,

    彼得

3 个答案:

答案 0 :(得分:9)

  

为什么字符集如此有限

因为名称必须是有效的Java标识符,所以您可以使用R.layout.foo之类的常量来标识运行时的布局。

  

哪些文件名受限制 - 全部   res?只是res / layout? RES /布局   加上其他一些文件夹?

res/

中的任何内容

答案 1 :(得分:2)

不确定#1的原因。从未在任何关于资源的阅读中看到过解释。根据我的经验#2,任何将在java中用作id的内容,例如R.drawable.markerR.string.default_message都必须遵循[a-z0-9_]的规则。

答案 2 :(得分:0)

当使用MacOS X作为开发平台时,几乎所有处理跨平台代码的开发人员迟早都会遇到以下问题:在下载/检出/克隆之后无法构建来自Linux / UNIX项目的源代码,因为该项目具有在单个目录中的两个同名文件,只有在大小写不同;在OS X上,这意味着你最终只得到一个文件,因为第二个文件会覆盖第一个文件。

当然HFS +可能区分大小写,但只能在格式化分区时进行配置,默认情况下,所有Mac都预先安装了OS X,并在预格式化的分区上使用不区分大小写的HFS +(因为这是默认模式)对于HFS +)。因此,您首先必须重新格式化新购买的Mac并重新安装OS X才能实现这一目标。然后做好准备,因为许多应用依赖于Mac上的不区分大小写;一个非常着名的例子是Steam(你不能从区分大小写的HFS +中运行Steam)。

而且不仅仅是MacOS。 FAT不区分大小写,而NTFS可以区分大小写(就像HFS +一样),默认情况下不是。另外我认为SMB不符合协议规范(至少是旧版本)。 CD上使用的文件系统不是等等。

所以我想从一开始就避免任何麻烦,谷歌认为强迫文件全部小写是一个好主意,在这种情况下,使用什么文件系统或者如何处理并不重要它已配置。当然,如果您仍然遇到源代码文件的问题,这有点愚蠢,但是这些可能是混合的情况是一个早于Android的决定,而且是Sun在Google甚至做梦之前做了很多年该系统。