我一直在开发一个带有ActionBar的应用程序,并且没有初始操作项(只是溢出点)。过了一会儿我决定实现一个搜索图标,所以我像这样更新我的/res/menu/main_activity_actions.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:yourapp="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity" >
<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:orderInCategory="1"
android:showAsAction="always"/>
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
android:showAsAction="never" />
</menu>
我还使用onCreateOptionsMenu()更新了主要活动(扩展了ActionBarActivity)。
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
问题是此代码根本不会显示action_search图标,而是始终将其放在溢出菜单列表中的相应“标题”中。 我认为问题是属性“showAsAction”因为我正在使用支持库所以我已将其更新为:
<menu
...
xmlns:myapp="http://schemas.android.com/apk/res-auto"
...
<item android:id="@+id/action_search"
myapp:showAsAction="ifRoom"/>
...
<item android:id="@+id/action_settings"
myapp:showAsAction="never"/>
</menu>
这个小修改使应用程序在启动时崩溃,我不明白为什么! 错误就像
“E / AndroidRuntime:FATAL EXCEPTION:main 过程:blabla.blabla.bla.appname,PID:29450 android.view.InflateException:二进制XML文件行#17:错误膨胀类android.support.v7.internal.view.menu.ActionMenuItemView ...“
有很多库错误而没有代码引用。
任何提示?谢谢!!
答案 0 :(得分:0)
试试这段代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:orderInCategory="1"
app:showAsAction="always"/>
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="always" />
</menu>
答案 1 :(得分:0)
我确实看到你的XMLNS标签很奇怪。在您的第一个示例中,您使用了:xmlns:yourapp="http://schemas.android.com/apk/res-auto"
但是在您的代码更改第二个示例中,您使用的是myapp:showAsAction
,而不是android:showAsAction
。 yourapp
/ myapp
或其他任何内容都无关紧要,只要它与整个文件匹配即可。但是你需要两者,因为自定义XML标记名称空间事物仅用于预蜂窝支持库的使用。 android:showAsAction
需要为3.x和更新版本。
尝试:
<menu ... xmlns:myapp="http://schemas.android.com/apk/res-auto"
...
<item android:id="@+id/action_search"
android:showAsAction="ifRoom"
myapp:showAsAction="ifRoom" />
...
<item android:id="@+id/action_settings"
android:showAsAction="never"
myapp:showAsAction="never"/>
</menu>
虽然我不确定这是否会导致崩溃。如果您在3.x或更高版本上运行,则崩溃可能与缺少资源或活动代码中的某些内容有关。