2010-06-24 66 views
7

文件名的一致性很好。爲什麼Android佈局文件名稱如此有限?

MyActivity.java包含公共類MyActivity

我想用它的佈局xml文件被稱爲RES /佈局/ MyActivity.xml

但我得到一個錯誤信息:「無效的文件名:只能包含[A-Z0-9 _]」

所以兩個問題:?

  1. 爲什麼字符集非常有限(甚至沒有大寫加油!) - 啊 - 這個限制很可能已經到位了,所以你永遠不會被文件系統搞砸了,它不會區分大小寫,就像蘋果的HFS +(儘管參見維基百科的血腥故事http://en.wikipedia.org/wiki/Comparison_of_file_systems#cite_note-note-35-77

  2. 哪些文件名受到限制 - 所有的資源?只是水庫/佈局? res /佈局加一些其他文件夾?

任何人都可以確認1,並提供2的細節?

感謝,

彼得

回答

9

爲什麼設定的性格讓有限

由於名稱必須是一個有效的Java標識符,這樣你就可以像使用R.layout.foo常量在運行時確定的佈局。

哪些文件名被限制 - 所有 的res?只是水庫/佈局? res/layout 加上一些其他文件夾?

凡是在res/

+1

但是...我的Java代碼中有大寫字母... – 2010-06-24 23:07:18

+1

除了你的操作系統文件系統理論,我無法解釋這部分。 – CommonsWare 2010-06-24 23:09:47

+0

感謝您的合理解釋,但我想知道是否還有更多。 – 2010-06-24 23:12:52

2

不知道的爲#1的原因。從來沒有在任何關於資源的讀物中看到解釋。根據我的經驗,對於#2,任何將用作java中的id的例如R.drawable.marker,R.string.default_message必須遵循​​的那些規則。

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已經做出了這樣的決定。