2011-01-28 66 views
48

我是一个在Android操作系统编程noob。我注意到,在我读过的书中,作者在活动名称前面放置了一个“点”,以便在清单中注册其活动。我环顾了Android开发者网站,我无法弄清楚为什么我们需要“点”。 “点”实际上是服务于一个目的吗?我需要它吗?我在下面列出了一个例子。 “NewActivity”之前,请注意“点”:什么是注册一个活动时的“点”

<activity android:name=".NewActivity"></activity> 

回答

40

正如您已经注意到的一点是没有必要的,但它的基本含义:在活动类生活在同一个包的应用程式。所以,如果您的应用程序包为:com.my.package则:

  • .YourActivity意味着你的类里面com.my.package
  • YourActivity表示您的班级在com.my.package(与上面相同)内。
  • .activities.YourActivity表示您的班级在com.my.package.activitites之内。
  • 您甚至可以执行如下操作:com.my.package.activities.YourActivity当您希望使用不同版本的应用程序并使用Ant自动更改对软件包的引用时,此功能非常有用。
+5

替换此文档似乎是说,你需要的前导点,以获得包名称预先挂起。这似乎是一场纯粹的“YourActivity”根本无法发挥作用的事故。为什么它不被解释为(很多被滥用的)默认包中的类名? – 2011-01-30 09:33:21

+2

这不是偶然的...看看源代码;) – Cristian 2011-01-30 14:15:00

26

http://developer.android.com/guide/topics/manifest/activity-element.html#nm

的android:命名
实现的活动,活动的子类的类的名称。属性值应该是完全限定的类名(例如“com.example.project.ExtracurricularActivity”)。 然而,作为简写,如果名称的第一个字符是一个周期(例如,“.ExtracurricularActivity”),它被附加到在<manifest>指定的包名称。

因此,考虑ApplicationManifest.xml

<manifest 
    ... 
    package="com.stackoverflow.android.geotask" 
    ...> 
    <application ...> 
     <activity android:name=".view.TaskListListView" ...> 
     ... 
    </application> 
</manifest> 

则由于android:name=".view.TaskListListView"具有领先期,所以它被解释为android:name="com.stackoverflow.android.geotask.view.TaskListListView"

2

该点将在您的应用程序清单中附加您的package

如果您的包名是com.app.demo

<activity android:name=".HelloWorldActivity"> 

这意味着活动位于演示包内。

您可以

<activity android:name="com.app.demo.HelloWorldActivity">