在那里,我尝试在菜单项中设置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_back
和action_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
对我不起作用?
答案 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命名空间应该 基于您的应用名称,但它可以是您想要的任何名称而且仅是 可在您声明它的文件范围内访问。)