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

來源:互聯網
上載者:User

<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”的方式!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.