Android菜单换行

我有以下Android菜单XML文件:

      

这给了我一行三个菜单按钮。 但是,我想将它们分成两行,第一行有2个按钮,整个底行有帮助按钮。 我已经尝试过对前两个进行分组,但这并没有成功。 如何在XML中强制换行?

据我所知,没有办法在菜单中强行换行。 如果你考虑一些场景,这实际上是有意义的。

例如,假设您在横向方向上有平板电脑(例如,Galaxy Tab)。 它有相当多的水平空间和相对较小的高度。 因此,如果在这种情况下强制断线,那将是浪费空间。

在此处输入图像描述


我对此做了更多的调查。 有一个名为MenuBuilder的类,用于管理选项菜单。 它使用icon_menu_layout布局资源来绘制菜单。 这是这个资源:

  

如果您按照IconMenuView实现,您将找到一个名为layoutItems有趣函数,用于计算菜单项的布局。 您只能通过人为增加菜单项的宽度来影响此函数的逻辑。 没有换行符。

 private void layoutItems(int width) { int numItems = getChildCount(); if (numItems == 0) { mLayoutNumRows = 0; return; } // Start with the least possible number of rows int curNumRows = Math.min((int) Math.ceil(numItems / (float) mMaxItemsPerRow), mMaxRows); /* * Increase the number of rows until we find a configuration that fits * all of the items' titles. Worst case, we use mMaxRows. */ for (; curNumRows <= mMaxRows; curNumRows++) { layoutItemsUsingGravity(curNumRows, numItems); if (curNumRows >= numItems) { // Can't have more rows than items break; } if (doItemsFit()) { // All the items fit, so this is a good configuration break; } } } 

因此,例如,如果您增加第一个项目的宽度,您将在菜单中获得两行。 但这可能是不可取的,因为您无法预测将在不同设备上使用的文本样式,大小和字体。

在此处输入图像描述