Android 菜单换行符
我有以下 Android 菜单 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/programma"
android:icon="@android:drawable/ic_menu_agenda"
android:title="@string/programma" />
<item android:id="@+id/settings"
android:icon="@android:drawable/ic_menu_preferences"
android:title="@string/settings" />
<item android:id="@+id/help"
android:icon="@android:drawable/ic_menu_help"
android:title="@string/help" />
</menu>
这在一行上提供了三个菜单按钮。但是,我想将它们分成两行,第一行有 2 个按钮,整个底行有帮助按钮。我已经尝试将前两个分组,但这并没有成功。 如何在 XML 中强制换行?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
据我所知,没有办法在菜单中强制换行。如果您考虑某些场景,这实际上是有道理的。
例如,假设您有横向平板电脑(例如 Galaxy Tab)。它具有相当大的水平空间和相对较小的高度。因此,如果在这种情况下强制换行,就会浪费空间。
我对此做了更多调查。有一个名为
MenuBuilder
用于管理选项菜单。它使用icon_menu_layout
绘制菜单的布局资源。 此处 是这个资源:如果您按照
IconMenuView
实现,你会发现一个有趣的函数,名为layoutItems
用于计算菜单项的布局。您只能通过人为增加菜单项的宽度来影响此函数的逻辑。没有可用的换行符。因此,例如,如果您增加第一个项目的宽度,您将在菜单中看到两行。但这可能是不可取的,因为您无法预测将在不同设备上使用的文本样式、大小和字体。
As far as I know there is no way to force line break in menu. This actually makes sense if you consider some scenarios.
For example, imagine you have tablet (for example, Galaxy Tab) in landscape orientation. It has quite a lot of horizontal space and relatively small height. So, it would be a waste of space if you force line break in such case.
I've done more investigation on this. There is a class called
MenuBuilder
which is used to manage options menu. It usesicon_menu_layout
layout resource to draw menus. Here is this resource:And if you follow to
IconMenuView
implementation, you'll find one interesting function calledlayoutItems
which is used to calculate layout for menu items. You can only influence this function's logic by artificially increasing width of menu items. No line breaks are available.So, for example, if you increase width of first item, you'll get two lines in menu. But this is probably undesirable, because you can't predict text style, size and font that will be used on different devices.