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>

ドット (.)を配置することがマニフェスト ファイルにアクティビティを追加する正しい方法であるかどうかを知りたかっただけです。

多くの投稿を行ってきましたが、正確な解決策は見つかりませんでした。これは、ドット (.) が必要ないことを示唆していますが、これはドット (.) を使用することを示唆しています。では、正しい方法は何ですか?

4

7 に答える 7

11

ドットはパッケージ名を意味します。より短いタイプの宣言です。

コンポーネント クラス (Activity、Service、BroadcastReceiver、および ContentProvider) に対してほとんど常に行うように、サブクラスを定義する場合、サブクラスは name 属性を介して宣言されます。名前には完全なパッケージ指定を含める必要があります。たとえば、Service サブクラスは次のように宣言できます。

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

ただし、省略形として、文字列の最初の文字がピリオドの場合、文字列は (要素の package 属性で指定されたように) アプリケーションのパッケージ名に追加されます。次の割り当ては、上記のものと同じです。

<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

はい、ドットを入れるのは正しい方法です.. eclipseの自己生成アクティビティを見ると、次のようになります。

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

これは正しいアプローチであり、私たちのアイデアは理解できます

于 2012-07-12T11:23:37.610 に答える
3

アクティビティが同じパッケージ内にある場合に何度も宣言する必要がないという目的のためだけに、マニフェスト タグの下の上部にパッケージを定義します。同じパッケージに属していることを知るために、ドットで書き始めるだけです。同じパッケージ内にあるすべてのアクティビティは、これを介してアクセスされます。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") の場合、.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 に答える