showAsAction=“ifRoom”表现不如预期

3

我创建了一个基本项目,使用“最低要求 SDK” API 11 来测试操作栏。 但是,操作按钮并没有显示在操作栏中,而是出现在溢出菜单中,甚至栏目是空的。我使用了以下代码。

<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      android:showAsAction="ifRoom"/>

但当我添加以下命名空间时,它开始显示操作按钮。
 xmlns:app="http://schemas.android.com/apk/res-auto"

我已经将 android:showAsAction="ifRoom" 更改为 app:showAsAction="ifRoom"

据我所知,android:showAsAction="ifRoom" 应该适用于 API 11 及以上版本。

请帮忙澄清一下。


2
如果操作栏中没有足够的空间容纳该项,则它将出现在操作溢出菜单中。请尝试使用 android:showAsAction="always" - Raghunandan
在操作栏中有很多空间,因为根本没有任何操作按钮。我也尝试了"always",但是什么都没发生。正如我所解释的,只有在添加了xmlns:app="http://schemas.android.com/apk/res-auto"命名空间后,它们才会出现,这个命名空间应该适用于API 10或更低版本。 - Lakmal K
请查看您的清单文件中的最小 SDK 版本。 - Raghunandan
3个回答

2
xmlns:yourapp="http://schemas.android.com/apk/res-auto"

xmlns意味着xml命名空间,它使来自xml的元素具有唯一性。您应始终包括此行以消除共享相同名称的两个元素之间的歧义。

更多信息请参见:http://www.sitepoint.com/xml-namespaces-explained/

您可以使用此代码摆脱版本不兼容性:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        //set action bar here
    }

0

你想在操作栏上显示搜索菜单

然后使用

 <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>

   <item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      android:showAsAction="always"/>

这好像是另外一回事 - Lakmal K

0
使用这个:
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
    <item
        android:id="@+id/action_menu"
        android:icon="@drawable/menu_icon"
        android:title="@string/action_settings"
        yourapp:showAsAction="ifRoom"/>

</menu>

1
非常感谢。这正是我所做的。您能否解释一下背后的原因? - Lakmal K
你需要像这样使用AppCompact。 - Ashwin S Ashok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接