菜单项不显示在操作栏上

我在我的应用程序中使用appcompat。 我希望菜单项显示在操作栏上,或者至less是溢出(3个点),以便在没有空间时显示它们。 操作栏上有很多空间,但仍然不显示。 菜单stream程从底部开始,也仅在菜单button被按下时才起作用。

menu_activity.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/menu_lang" android:showAsAction="always" android:title="@string/menu_lang" android:icon="@android:drawable/ic_input_lang"/> </menu> 

活动:

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_activity, menu); return true; } 

这篇文章说,当硬件菜单button存在时,它不起作用。 但其他应用程序能够在同一设备上显示项目。 所以,这个答案似乎是不正确的。 有人可以帮忙吗?

在这里输入图像说明

您似乎正在使用错误的菜单:您的文件被命名为“menu_activity.xml”,并使用资源标识对菜单进行膨胀: R.menu.reminder_menu

菜单的资源名称应与文件名相同,即: R.menu.manu_activity

再次尝试一下 – 我也遇到过一次,这让我疯狂…

更新澄清之后,上面的部分是混淆,请确保:

  1. 您扩展了ActionBarActivity。
  2. 您可以使用(或扩展)其中一个Theme.AppCompat主题(或整个应用程序)
  3. 因为在较旧的设备上,Actionbar相关属性不存在,请确保XML中的所有这些属性都与自定义名称空间一起使用。 这里是showAsAction属性,以便兼容性库可以select它们。

您已经定义了自定义名称空间(“app”,位于菜单标签中)。 您需要根据Android指南将android:showAsAction标记更改为app:showAsAction

您更正的menu_activity.xml将如下所示:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/menu_lang" app:showAsAction="always" android:title="@string/menu_lang" android:icon="@android:drawable/ic_input_lang"/> </menu> 

扩展的Android操作栏指南涵盖了这些新的和令人讨厌的陷阱…

好吧,我想我find了你的解决scheme。 它被称为溢出菜单,你需要在你的onCreate方法中调用下面的方法。

 private void getOverflowMenu() { try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if(menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { e.printStackTrace(); } } 

试试这个,让我知道它是否适合你。

编辑:

我想我终于明白了你的问题。 我可以给你一个想法。 如果您不想使用溢出菜单,只显示已发布的屏幕截图中显示的菜单项,则可以在活动之上创build布局。

您可以采用线性布局,给出与操作栏相同的背景,并将所需的图标放置在那里,然后使用onClickListener为其提供function。 希望这会给你一些想法。 这样你可以创build自己的自定义菜单。 尝试下面的布局,并用菜单图标replace可绘制的ic_launcher。 然后,只需设置onClickListeners,然后在onClick方法中执行想要执行的任何function。

 <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:background="#66000000" > <ImageView android:id="@+id/xMenuBtn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:background="@drawable/ic_launcher" /> <TextView android:id="@+id/xMenuTxt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Chats" android:textSize="18sp" android:layout_toRightOf="@+id/xMenuBtn1" android:layout_centerVertical="true" /> <ImageView android:id="@+id/xMenuBtn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@+id/xMenuBtn3" android:background="@drawable/ic_launcher" /> <ImageView android:id="@+id/xMenuBtn3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:background="@drawable/ic_launcher" /> </RelativeLayout> 

尝试在您的活动onCreate():

 ActionBar bar = getSupportActionBar(); bar.setTitle(R.string.app_name); 

接着 :

  @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.clear(); getSupportMenuInflater().inflate(R.menu.menu_activity, menu); return super.onPrepareOptionsMenu(menu); }