以前,在使用AppCompat
之前,我使用SherlockActionBar
来支持Android 2.3。
以下菜单在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 :(得分:0)
库提供的属性(或应用程序本身)假定为名称空间,以避免冲突/冲突。
ActionBarSherlock通过命名属性android:showAsAction
来屏蔽此行为。 (与showAsAction
命名空间中的android
属性相对):https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__attrs.xml