今天碰到一个简单但又坑爹的现象。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myTest="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.MyCustomerViewPagerDemo.MainActivity" >
<item android:id="@+id/action_push"
android:showAsAction="always"
android:orderInCategory="1"
android:icon="@drawable/push"
android:title="@string/push"/>
<item android:id="@+id/action_settings"
android:title="@string/see_charge"
android:orderInCategory="100"
android:showAsAction="never" />
</menu>
这是我之前写的menu.xml。后来发现居然Item居然一直显示在Action OverFlow上,而不是显示到ActionBar上。之后看了一下Android Training。 发现是名字空间应用错误。
import android.support.v7.app.ActionBarActivity;
在 Activity extends ActionBarActivity的时候,import这一串东西。
很显然,我导入的是support7拓展支持包里的ActionBarActivity。所以不应该引用android:showAsAction
这样的原生引用。
为了兼容 Android 2.1 的版本使用了 Support 库,在 android 命名空间下 showAsAction 属性是不可用的。Support 库会提供替代它的属性,你必须声明自己的 XML 命名空间,并且使用该命名空间作为属性前缀。(一个自定义 XML 命名空间需要以你的 app 名称为基础,但是可以取任何你想要的名称,它的作用域仅仅在你声明的文件之内。)例如:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myTest="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.MyCustomerViewPagerDemo.MainActivity" >
<item android:id="@+id/action_push"
myTest:showAsAction="always"
android:orderInCategory="1"
android:icon="@drawable/push"
android:title="@string/push"/>
<item android:id="@+id/action_settings"
android:title="@string/see_charge"
android:orderInCategory="100"
android:showAsAction="never" />
</menu>
区别之处就在于需要显示到ActionBar上的MenuItem的showAsAction引用的是自定义名字空间里面的引用。
做一下记录,希望可以帮助到你。