14

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

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

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

在某些地方作为

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

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

我浏览了很多帖子,但没有找到确切的解决方案。表明 dot(.) 不是必需的,而表明使用 dot(.)。那么正确的方法是什么?

4

7 回答 7

11

点表示你的包名。它是更短的声明类型。

如果您定义一个子类,就像您几乎总是为组件类(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 声明类名

于 2012-07-12T11:06:48.827 回答
5

是的,把点放在正确的方式..如果你看到它看起来像日食自我生成的活动。

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

所以这是正确的方法,我们的ide可以理解

于 2012-07-12T11:23:37.610 回答
4

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

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" >
于 2019-06-09T19:35:27.487 回答
3

为了这个目的,我们在 manifest 标记下定义了包,只是如果有任何活动驻留在同一个包中,我们就不必一次又一次地声明它。我们只从开始写就知道它属于同一个包。驻留在同一个包中的所有活动都将通过此访问,如果您声明 com.example 以外的新包,请说 com.example.sample,而您只需定义 .sample.YourActivityname.thats 它。我们这样做是从正确的包装。

希望这会帮助你。

于 2012-07-12T11:28:26.810 回答
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”)。但是,作为简写,如果名称的第一个字符是句点(例如,“.ExtracurricularActivity”),它会附加到 .

所以给定ApplicationManifest.xml:

...

那么由于 android:name=".view.TaskListListView" 有一个领先的句号,所以它被解释为 android:name="com.stackoverflow.android.geotask.view.TaskListListView"。

来源

于 2012-07-12T11:31:02.133 回答
0

就这样做,这意味着你在这个包中的活动com.your.package 我们提到MySecondActivity这个活动与那个包有关

<activity 
     android:name="com.your.package.MySecondActivity" 
     android:label="@string/title_second_activity">
</activity>
于 2012-07-12T11:04:20.323 回答
0

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

  1. .YourActivity表示你的类在 com.your.package 中。
  2. YourActivity表示你的类在 com.your.package 中(同上)。

所以这意味着这基本上是同一件事

为了确认我的答案,请查看CesarB 的答案,我还获取了 android 源 coe,我完全同意他的观点,这就是 AndroidManifest 中名称约定的工作方式:

  1. 如果名称以点开头,请始终在其前面加上包。
  2. 如果名称在其他任何地方(不是开头)有一个点,请不要为其添加前缀。
  3. 如果名称根本没有点,还要在它前面加上包。
于 2012-07-12T11:31:52.867 回答