在清单文件中定义活动的正确语法是什么

时间:2012-07-12 11:02:04

标签: android android-activity syntax manifest

将活动添加到AndroidManifest.xml的正确方法是什么?

实际上我在很多地方都看到过定义为

的活动
<activity 
    android:name="MyFirstActivity" 
    android:label="@string/title_first_activity">
</activity>

在某些地方

<activity 
    android:name=".MySecondActivity" 
    android:label="@string/title_second_activity">
</activity>

我只是想知道放点(。)是否是向清单文件添加活动的正确方法。

我经历了很多帖子,但我没有找到确切的解决方案。 This表示不需要点(。),而this建议使用点(。)。那么正确的方法是什么?

7 个答案:

答案 0 :(得分:11)

dot表示您的包名称。这是更简短的宣言类型。

  

如果您定义子类,则几乎总是为组件定义   类(Activity,Service,BroadcastReceiver和ContentProvider),   子类是通过name属性声明的。这个名字必须   包括完整的包装名称。例如,Service子类   可能会声明如下:

<manifest . . . >
     <application . . . >
         <service android:name="com.example.project.SecretService" . . . >
             . . .
         </service>
         . . .
     </application> 
</manifest>
  

但是,作为简写,如果字符串的第一个字符是句点,则将字符串附加到   应用程序的包名称(由元素指定   包属性)。以下分配与一个分配相同   上面:

<manifest package="com.example.project" . . . >
     <application . . . >
         <service android:name=".SecretService" . . . >
             . . .
         </service>
         . . .
     </application> 
</manifest> 
  

启动组件时,Android会创建指定子类的实例。如果子类不是   如果指定,它将创建基类的实例。

http://developer.android.com/guide/topics/manifest/manifest-intro.html 声明类名

答案 1 :(得分:5)

是的,把点放在正确的位置.. 如果你看到eclipse自生成的活动,它看起来像。

 <activity 
        android:name=".MyFirstActivity" 
        android:label="@string/app_name">
    </activity>

所以它的正确方法,我们的理念可以理解

答案 2 :(得分:3)

为了这个目的,我们在manifest标签的顶部定义了包,只是我们不必一次又一次地声明它,如果任何活动在同一个包中存在它。我们只开始写要知道它属于同一个包。所有活动都在同一个包中访问,如果你声明com.example以外的新包说com.example.sample,你只需要定义.sample.YourActivityname .thats it。我们这样做是从正确的包装中引用活动。

希望这会对你有所帮助。

答案 3 :(得分:2)

使用相对路径很好。
使路径由点而不是斜线分隔。

android:name=".one_path_level_down.MainActivity"
android:name=".one_path_level_down.DetailActivity"

顶层是您在“ package =“:

中指定的软件包级别
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.abc.myapp1" >

答案 4 :(得分:1)

  

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

android:name
The name of the class that implements the activity, a subclass of Activity. The attribute value should be a fully qualified class name
     

(例如,“com.example.project.ExtracurricularActivity”)。但是,作为   一个简写,如果名字的第一个字符是句号(for   例如,“。VeryracurricularActivity”),它被附加到包中   在。

中指定的名称      

所以给定了ApplicationManifest.xml:

     

                            ...         

     

然后因为android:name =“。view.TaskListListView”有一个领先的时期,   所以它被解释为   机器人:名称= “com.stackoverflow.android.geotask.view.TaskListListView”

source

答案 5 :(得分:0)

就这样做,这意味着你在这个包com.your.package中活动 我们被提及MySecondActivity此活动与该包

有关
<activity 
     android:name="com.your.package.MySecondActivity" 
     android:label="@string/title_second_activity">
</activity>

答案 6 :(得分:0)

点不是必需的,但它基本上意味着:活动类存在于应用程序的同一个包中。因此,如果您的应用包是:com.your.package,那么:

  1. .YourActivity 表示您的班级位于com.your.package中。
  2. YourActivity 表示您的班级位于com.your.package内(相同 如上所述)。
  3. 所以这意味着这基本上是一回事

    为了确认我的回答,请看CesarB's answer,我还获取了android source coe,我完全赞同他,这就是AndroidManifest中名称约定的工作原理:

    1. 如果名称以点开头,请始终在其前面加上包。
    2. 如果名称在其他任何地方(不在开头)有一个点,请不要为它添加前缀。
    3. 如果名称根本没有点,也请在包装前加上前缀。