Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> activity的android:name所指的Activity實現類的簡寫問題

activity的android:name所指的Activity實現類的簡寫問題

編輯:關於Android編程

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.apis">


<activity android:name="ApiDemos">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


<activity android:name=".app.HelloWorld" android:label="@string/activity_hello_world">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.SAMPLE_CODE" />
            </intent-filter>
        </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.android.sample",如果activity的實現類也在這個package下,則android:name為實現的類名,這個類名前加不加點都沒有關系,如果activity的實現類是在默認包的子包裡面,則這個“.”是必須有的,比如activity的實現是com.android.sample.app.DialogActivity,則android:name必須寫成.app.DialogActivity或者com.android.sample.app.DialogActivity。如果只寫app.DialogActivity,則會報錯。

      呵呵,感覺Android的這個設計有點失敗,統一格式,強制簡寫方式必須有“.”不就得了嗎,免得讓人暈乎!官方的例子裡居然還特意這樣設計,難道這有特殊的用意?

      管它呢!不論Activity的子類是否在默認package下,還是在默認包的子包下,類名的簡寫方式統統采用“.ClassName”的方式!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved