app:showAsAction ifRoom无法在appcompat操作栏上运行

时间:2014-05-29 16:02:31

标签: android

我有一个带有以下菜单项的操作栏;

<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="com.blah.blah.app.ClientActivity" >

    <item android:id="@+id/action_search"
        android:icon="@drawable/search"
        android:title="@string/action_search"
        android:orderInCategory="1"
        app:showAsAction="ifRoom|withText"/>

    <item android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:orderInCategory="5"
        app:showAsAction="ifRoom"/>

    <item android:id="@+id/action_waiter"
        android:title="@string/action_waiter"
        android:orderInCategory="6"
        app:showAsAction="ifRoom"/>

    <item android:id="@+id/action_cleantable"
        android:title="@string/action_cleantable"
        android:orderInCategory="7"
        app:showAsAction="ifRoom"/>

    <item android:id="@+id/action_suggest"
        android:title="@string/action_suggest"
        android:orderInCategory="8"
        app:showAsAction="ifRoom"/>

    <item android:id="@+id/action_waiterlogin"
        android:title="@string/action_waiterlogin"
        android:orderInCategory="9"
        app:showAsAction="ifRoom"/>
</menu>

问题是我的搜索按钮没有显示在操作栏上但文本显示为溢出。我的行动栏里有足够的空间

我正在使用"@style/Theme.AppCompat.Light"

任何人都可以帮助我吗?

6 个答案:

答案 0 :(得分:8)

请尝试使用  android:showAsAction="ifRoom|withText"代替app:showAsAction="ifRoom|withText"

答案 1 :(得分:4)

在我的情况下,我不得不在onCreateOptionsMenu上添加几行。

Android Studio在使用appCompat时没有让我使用android:showAsAction =“ifRoom”。

app:showAsAction =“ifRoom”无法正常工作,我毫无问题地删除了它。

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater  inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        for (int i = 0; i < menu.size(); i++) {
            menu.getItem(i).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        }
        return super.onCreateOptionsMenu(menu);
    }

答案 2 :(得分:1)

如果有其他人遇到同样的问题 - 我无法显示按钮,直到我覆盖onCreateOptionsMenu函数并膨胀菜单(我正在使用com.android.support:appcompat-v7:24.2.1版本)

以下是代码段:

 @Override
    public boolean onCreateOptionsMenu (Menu menu){

        getMenuInflater().inflate(R.menu.toolbar_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }

答案 3 :(得分:0)

ToolBar(在ActivityBar中)努力不超过一些可见元素。并且该限制低于ToolBar确实可以包含的限制。限制在 android.support.v7.view.ActionBarPolicy 类中设置:

`/**
     * Returns the maximum number of action buttons that should be permitted within an action
     * bar/action mode. This will be used to determine how many showAsAction="ifRoom" items can fit.
     * "always" items can override this.
     */
    public int getMaxActionButtons() {
        final Resources res = mContext.getResources();
        final int widthDp = ConfigurationHelper.getScreenWidthDp(res);
        final int heightDp = ConfigurationHelper.getScreenHeightDp(res);
        final int smallest = ConfigurationHelper.getSmallestScreenWidthDp(res);

if (smallest > 600 || widthDp > 600 || (widthDp > 960 && heightDp > 720) || (widthDp > 720 && heightDp > 960)) { // For values-w600dp, values-sw600dp and values-xlarge. return 5; } else if (widthDp >= 500 || (widthDp > 640 && heightDp > 480) || (widthDp > 480 && heightDp > 640)) { // For values-w500dp and values-large. return 4; } else if (widthDp >= 360) { // For values-w360dp. return 3; } else { return 2; } }`

正如您所看到的,限制在2到5之间,这取决于屏幕宽度。因此,如果您想要超出限制,您应该使用 showAsAction =&#34; always&#34; 或为ActionBar创建自己的视图。

答案 4 :(得分:0)

   app:showAsAction="ifRoom" 

更改为

   android:showAsAction="ifRoom|withText"

答案 5 :(得分:0)

您必须拥有一个名称空间才能让app声明正常工作

<menu ......
xmlns:app="http://schemas.android.com/apk/res-auto

用于在您的操作项中使用的app命名空间前缀。