activity的android:name 設置問題


 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
 2     package="com.example.android.apis"> 
 3 
 4 
 5 <activity android:name="ApiDemos"> 
 6             <intent-filter> 
 7                 <action android:name="android.intent.action.MAIN" /> 
 8                 <category android:name="android.intent.category.DEFAULT" /> 
 9                 <category android:name="android.intent.category.LAUNCHER" /> 
10             </intent-filter> 
11 </activity> 
12 
13 
14 <activity android:name=".app.HelloWorld" android:label="@string/activity_hello_world"> 
15             <intent-filter> 
16                 <action android:name="android.intent.action.MAIN" /> 
17                 <category android:name="android.intent.category.SAMPLE_CODE" /> 
18             </intent-filter> 
19 </activity> 

  activity 組件的 android:name 屬性采用類名的簡寫方式,查看文檔類名的簡寫格式為 ".ClassName", 但為什么<activity android:name="ApiDemos">里的android:anem="ApiDemos",而不是android:anem=".ApiDemos"呢? 而后面的所有Activity組件的android:name的值都是".ClassName"格式呢?google查詢android:name屬性值的說明,但未查到有類名前不加 "." 的說明!


  測試驗證結果 "ApiDemos" 與 ".ApiDemos" 的寫法都能正確運行程序。明明文檔中說明的是 ".ClassName" 格式啊, 難道類名前有 "." 與沒有 "." 是一樣的?!於是把其它的Activity的android:name的值字符串中的第一個 "."去掉,再運行程序,卻不行.

  反復的測試,發現了一個規則:

  如果manifest中指定了package屬性,比如指定為"com.example.android.apis",如果activity的實現類ApiDemos 也在這個package下,則android:name為實現的類名,這個類名前加不加點都沒有關系,

  如果activity的實現類是在默認包的子包里面,則這個 "." 是必須有的,比如activity的實現是com.android.sample.app.DialogActivity,則android:name必須寫成.app.DialogActivity或者com.android.sample.app.DialogActivity。如果只寫app.DialogActivity,則會報錯。

 

  不論Activity的子類是否在默認package下,還是在默認包的子包下,類名的簡寫方式統統采用“.ClassName”的方式,可避免類似問題!

 

參考:

  http://blog.csdn.net/fuxiaohui/article/details/9348677


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM