2015-05-13 46 views
1

以前,在使用AppCompat之前,我使用的是SherlockActionBar來支持Android 2.3。爲什麼在使用AppCompat時需要在菜單項中使用應用程序名稱空間

以下菜單工作得完美SherlockActionBar

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/menu_browser" 
     android:title="@string/menu_browser" 
     android:showAsAction="ifRoom" 
     android:icon="?attr/actionBarBrowserIcon"/> 
    <item 
     android:id="@+id/menu_share" 
     android:title="@string/menu_share" 
     android:showAsAction="ifRoom" 
     android:icon="?attr/actionBarShareIcon"/> 
</menu> 

然而下,甚至因爲遷移到AppCompat,我知道上面的菜單無法正常工作。我需要使用app命名空間,以使其工作。

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/menu_browser" 
     android:title="@string/menu_browser" 
     app:showAsAction="ifRoom" 
     android:icon="?attr/actionBarBrowserIcon"/> 
    <item 
     android:id="@+id/menu_share" 
     android:title="@string/menu_share" 
     app:showAsAction="ifRoom" 
     android:icon="?attr/actionBarShareIcon"/> 
</menu> 

這是爲什麼?與SherlockActionBar相比有什麼區別,這會使得app命名空間變得不必要?

回答

0

由庫(或由應用程序本身)提供的屬性假定爲名稱空間以避免衝突/衝突。

ActionBarSherlock通過命名屬性android:showAsAction來掩蓋此行爲。 (與名稱空間android中的showAsAction屬性相反):https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__attrs.xml

+0

爲什麼Google不會進行與Jake Wharton相同的更改?這對於App開發人員來說不是更方便嗎? –

+0

方便,是的。正確,不。名稱空間的存在是有原因的。 – tachyonflux

相關問題