在所有Android示例中,活动,服务等的名称都以点开头:
<activity android:name=".MyActivity" />
我忘了在所有Android项目中都这样做 - 但它们确实很完美。
我的问题:这个领先的点真的需要吗?
编辑:以下是我的某个应用中的一个小快照示例。这个程序很完美。它不使用限定名称,也不使用点:
<activity
android:exported="false"
android:name="Tankvorgaenge" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<activity android:name="Tankvorgangdetails" />
<activity android:name="Tankvorgangdetailsbearbeiten" />
<activity android:name="TankvorgangUebersicht" />
<activity android:name="Verbrauch" />
<service android:name="MyService" />
答案 0 :(得分:22)
当且仅当指定的类不是应用程序中的子包的一部分时,省略该点并且不完全限定包/类名将起作用。
如果您的应用程序包名称为com.example.myapp
,并且您有一个活动类com.example.myapp.MyActivity
:
android:name="MyActivity"
可以使用。android:name=".MyActivity"
可以使用。android:name="com.example.myapp.MyActivity"
可以使用。但是如果你的源代码树中的子包中有相同的应用程序包和一个活动类,例如com.example.myapp.myactivities.MyActivity
就会发生变化。
android:name=".myactivities.MyActivity"
即可使用android:name="com.example.myapp.myactivities.MyActivity"
即可使用android:name="MyActivity"
无法使用 android:name="myactivities.MyActivity"
无法使用 3不起作用,因为这会推断出您所说的类名实际上是com.example.myapp.MyActivity
,就像上面的第一个例子中一样。找不到具有此名称的类,您将收到错误。
4不起作用,因为它看起来像一个完全限定的类名,即系统会将其解释为myactivities.MyActivity
是完全限定名称本身,而不是com.example.myapp.myactivities.MyActivity
的真实姓名
你需要这里的前导点来阐明你使用的是相对路径,而不是绝对路径。如果您只指定一个没有包信息的类名,系统会推断该类位于应用程序包层次结构的根目录中。
答案 1 :(得分:2)
点是使用应用程序的相对路径给出package_name
。您可以将.MyActivity
替换为com.yourActivityPackage.MyActivity
答案 2 :(得分:1)
是的,activity[android:name]
应该指定一个完全限定的package.Class
,或者如果它以点开头,那么它会附加到application
的包中。
请参阅doc
答案 3 :(得分:0)
这是必需的。它是包名称的缩写。 android:name应该指定完整的类名。通过放入一个前导点,我们可以指出以下类名在清单中上面声明的“包”中。