为什么`ifroom`不起作用 - android studio

时间:2015-07-02 05:03:19

标签: android android-layout android-studio android-menu

在那里,我尝试在菜单项中设置ifroom。你可以在这段代码中看到我尝试所有可能的senario(请参阅每个showAsAction项目

<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">

    <item
        android:id="@+id/action_forward"

        android:title="forward"
        android:icon="@drawable/ic_action_arrow_forward"
        android:showAsAction="ifRoom"
        ></item>


    <item
        android:id="@+id/action_zoom_in"
        android:title="zoom in"
        android:icon="@drawable/ic_action_zoom_in"
        android:showAsAction="ifRoom|withText"
        ></item>



    <item
        android:id="@+id/action_home"
        android:title="home"
        android:icon="@drawable/ic_action_home"
        app:showAsAction="ifRoom|withText"
        ></item>


    <item
        android:id="@+id/action_refresh"
        android:title="refresh"
        android:icon="@drawable/ic_action_refresh"
        app:showAsAction="ifRoom"
        ></item>

    <item
        android:id="@+id/action_zoom_out"
        android:title="zoom out"
        android:icon="@drawable/ic_action_zoom_out"
        showAsAction="ifRoom"
        ></item>

    <item
        android:id="@+id/action_back"
        android:title="back"
        android:icon="@drawable/ic_action_arrow_back"
        app:showAsAction="always"
        ></item>
</menu>

但它只是在主页面中显示action_backaction_home

我是android studio中的noob,但我觉得这个错误与菜单的宽度有关。 (它不是100%宽度)

请参阅我的 main_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <include
        android:id="@+id/tool_bar_bottom"
        layout="@layout/tool_bar_bottom"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_gravity="center" />

</LinearLayout>

和 的 tool_bar_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:background="@color/ColorPrimary"
    android:elevation="2dp"
    android:theme="@style/Base.ThemeOverlay.AppCompat.Dark"
    xmlns:android="http://schemas.android.com/apk/res/android" />

我认为结构是真的,所有layout_width的值都是match_parent所以为什么ifroom对我不起作用?

1 个答案:

答案 0 :(得分:1)

如果您设置&#34; showAsAction&#34; Android将始终显示菜单属性为&#34;始终&#34;。如果设置&#34; ifRoom&#34;,只有当操作栏有空间显示菜单项时才会显示,否则它将显示溢出图标。

在您的情况下,您正在看&#34; action_back&#34;因为它总是&#34;总是&#34;。然后&#34; action_home&#34;因为有一个图标的空间,这是第一个有&#34; app:showAsAction&#34;属性。其他人有&#34; android:showAsAction&#34;属性。关于这种行为的更多解释如下。

  

如果您的应用使用支持库来兼容版本   与Android 2.1一样低,showAsAction属性不可用   来自android:名称空间。相反,此属性由。提供   支持库,您必须定义自己的XML命名空间并使用   该命名空间作为属性前缀。 (自定义XML命名空间应该   基于您的应用名称,但它可以是您想要的任何名称而且仅是   可在您声明它的文件范围内访问。)