注册活动时的"点"是什么

Cav*_*hon 54 android android-manifest

我是Android OS编程的小伙子.我在书中注意到,当我在清单中注册活动时,作者在活动名称前面放置了一个"点".我查看了Android开发者网站,我无法弄清楚为什么我们需要"点"."点"实际上是服务器的目的吗?我需要它吗?我在下面列举了一个例子.注意"NewActivity"之前的"点":

<activity android:name=".NewActivity"></activity>
Run Code Online (Sandbox Code Playgroud)

Cri*_*ian 42

您已经注意到这一点并非必要,但它基本上意味着:活动类位于应用程序的同一个包中.因此,如果您的应用包是:com.my.package那么:

  • .YourActivity意味着你的班级在里面com.my.package.
  • YourActivity意味着你的班级在里面com.my.package(与上面相同).
  • .activities.YourActivity意味着你的班级在里面com.my.package.activitites.
  • 您甚至可以执行以下操作:com.my.package.activities.YourActivity当您希望拥有不同版本的应用程序并使用Ant自动更改对包的引用时,这非常有用.

  • 文档似乎说你需要前导点来预先填写包名.一个简单的"YourActivity"工作似乎是偶然的.为什么它不被解释为(备受诟病的)默认包中的类名? (6认同)
  • 这不是偶然的...看看源代码;) (2认同)

Ber*_*t F 29

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

android:name
实现活动的类的名称,Activity的子类.属性值应该是完全限定的类名(例如,"com.example.project.ExtracurricularActivity").但是,作为简写,如果名称的第一个字符是句点(例如".ExtracurricularActivity"),则将其附加到指定的包名称中<manifest>.

所以给出ApplicationManifest.xml:

<manifest 
    ...
    package="com.stackoverflow.android.geotask"
    ...>
    <application ...>
        <activity android:name=".view.TaskListListView" ...>
        ...
    </application>
</manifest> 
Run Code Online (Sandbox Code Playgroud)

那么因为android:name=".view.TaskListListView"有一个领先的时期,所以它被解释为android:name="com.stackoverflow.android.geotask.view.TaskListListView".