Android操作栏不显示溢出

我在我的应用程序中有3个项目的行动栏。

由于空间问题,只能显示2个,所以我希望第一个显示,其余的显示在溢出。 但实际上只显示前两项,并且没有可检测的溢出。

这里是相关的代码:list_menu.xml

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_insert" android:icon="@android:drawable/ic_menu_add" android:title="@string/menu_insert" android:showAsAction="ifRoom|withText"/> <item android:id="@+id/menu_call" android:icon="@android:drawable/ic_menu_call" android:title="@string/menu_call" android:showAsAction="ifRoom|withText"/> <item android:id="@+id/menu_agenda" android:icon="@android:drawable/ic_menu_agenda" android:title="@string/menu_agenda" android:showAsAction="ifRoom|withText"/> </menu> 

Activity.java

 public boolean onCreateOptionsMenu(Menu menu) { MenuInflater mi = getMenuInflater(); mi.inflate(R.menu.list_menu, menu); return true; } 

谢谢!

如果你想显示三个点,不pipe设备菜单button! 那么你可以在你的应用程序类中调用这个方法'onCreate method-

 private void makeActionOverflowMenuShown() { //devices with hardware menu button (eg Samsung Note) don't show action overflow menu 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) { Log.d(TAG, e.getLocalizedMessage()); } } 

行动酒吧

RES /菜单/ menu.xml文件

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- Search / will display always --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:showAsAction="always" android:title="@string/action_search"/> <!-- Location Found --> <item android:id="@+id/action_location_found" android:icon="@drawable/ic_action_location_found" android:showAsAction="always" android:title="@string/action_location_found"/> <!-- More --> <item android:id="@+id/a_More" android:icon="@drawable/ic_action_overflow" android:showAsAction="always" android:title="More"> <menu> <!-- Refresh --> <item android:id="@+id/action_refresh" android:icon="@drawable/ic_action_refresh" android:showAsAction="never" android:title="@string/action_refresh"/> <!-- Help --> <item android:id="@+id/action_help" android:icon="@drawable/ic_action_help" android:showAsAction="never" android:title="@string/action_help"/> <!-- Check updates --> <item android:id="@+id/action_check_updates" android:icon="@drawable/ic_action_refresh" android:showAsAction="never" android:title="@string/action_check_updates"/> </menu> </item> </menu> 

MainActivity.java

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); } } 

下载操作栏图标集

我意识到这不是一个溢出菜单,但它是相似的。 好吧,这很简单,但很难弄清楚。

你首先需要一个你想用来作为溢出inflater的菜单项。 例

 <item android:id="@+id/a_More" android:icon="@drawable/more" android:showAsAction="always" android:title="More"> </item> 

一旦你有物品,在溢出菜单中添加一个包含你想要物品的子菜单。 例:

 <item android:id="@+id/a_More" android:icon="@drawable/more" android:showAsAction="always" android:title="More"> <menu> <item android:id="@+id/aM_Home" android:icon="@drawable/home" android:title="Home"/> </menu> </item> 

点击后会膨胀其他项目。 我的应用程序正在使用ActionBarSherlock 4.0,所以在此之前,你将需要访问“SplitActionBar”。 (将仍然在默认的Android操作栏上工作)

方法如下:在您的AndroidManifest.xml文件中,您需要在需要溢出菜单的活动下添加此代码。

 android:uiOptions="splitActionBarWhenNarrow" 

注意:你的项目膨胀你的溢出菜单必须showAsAction="always"

Vwola! 你有一个溢出菜单! 希望我帮助你。 🙂

在具有硬件菜单button(Galaxy S3,像三星那样固执的…)的设备上,通过使用硬件菜单button,溢出菜单performance为“传统”菜单。

当你说“溢出”菜单,你的意思是最后出现的三个点,表明有更多的项目….或者你的意思是分裂的行动条出现在底部的溢出项目?

如果您的意思是拆分操作栏,则应将其添加到您的活动清单文件中

 android:uiOptions="splitActionBarWhenNarrow" 

默认情况下,三点溢出菜单应该自动发生,所以很难从上面提供的信息中知道问题是什么。

看来,在具有菜单button的设备上,溢出菜单不会显示在ActionBar中。 此外,我们无法知道设备是否具有API级别14 (4.0+) 之前的硬件菜单button。

该解决scheme向android.support.v7.app.ActionBar添加一个溢出button,该button仅在Honeycomb(<3.0)之前打开标准选项菜单,否则将其留给系统。 在任何情况下,你可以selectalwaysifRoom所有行动。

从操作栏图标包获取溢出图标。

添加一个菜单(我将一些不相关的部分称为标题,sorting等)

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_overflow" android:orderInCategory="100" android:icon="@drawable/ic_action_overflow" app:showAsAction="always" /> <item android:id="@+id/action_first" app:showAsAction="always" /> <item android:id="@+id/action_second" app:showAsAction="ifRoom" /> </menu> 

删除我们的3.0+溢出行动

 @Override public boolean onPrepareOptionsMenu(Menu menu) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { menu.removeItem(R.id.action_overflow); } return super.onPrepareOptionsMenu(menu); } 

最后从溢出动作中调用Activity.openOptionsMenu()

呃…不。 您不能从菜单button中调用openOptionsMenu() ,但是如果您使用的是AndroidAnnotations,那么您可以轻松完成:

 @OptionsItem void action_overflow() { openOptionsMenuDeferred(); } @UiThread void openOptionsMenuDeferred() { openOptionsMenu(); } 

如果没有,你应该做这样的事情,我想

 @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == id.action_overflow) { openOptionsMenuDeferred(); return true; } } private Handler handler = new Handler(Looper.getMainLooper()); public void openOptionsMenuDeferred() { handler.post(new Runnable() { @Override public void run() { openOptionsMenu(); } } ); } 

要在actionbarcompat上显示动作溢出(三点):
在菜单文件中,例如:
main.xml中

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_settings" android:title="@string/action_settings" app:showAsAction="never"/> <item android:id="@+id/action_about" android:title="@string/action_about" app:showAsAction="never"/> </menu> 

并在活动文件中:

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } 

这对我来说工作得很好。
testing谷歌Nexus S,三星S3。

尝试从Theme.AppCompat.Light.DarkActionBar更改应用程序的主题为Theme.AppCompat.Light

在菜单标签中放入xmlns:your_app_name="http://schemas.android.com/apk/res-auto" ,而不是android:showAsAction="always"使用your_app_name:showAsAction="always"

例如

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