如何在平板电脑上打开OptionsMenu?

3

我开发了一款主要面向智能手机的安卓应用。然而,在平板电脑模拟器上,我发现它也可以在安卓3.x上运行。

然而,有一个小问题。用户无法在点击菜单按钮时打开OptionsMenu。如您所知,在智能手机上,菜单从底部出现。但在平板电脑上什么都不会发生。

我已经阅读了 http://developer.android.com/guide/topics/ui/menus.html#options-menu 但仍然无法弄清楚如何处理这个问题。我的应用程序具有自定义操作栏。

我的代码非常简单。在主活动中:

@Override
public boolean onCreateOptionsMenu(Menu men) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.layout.menu, men);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    //...
    }
}

并且偏好设置活动:

public class MdPrefsActivity extends PreferenceActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         getPreferenceManager().setSharedPreferencesName(
                 MdSharedPrefs.PREFS_NAME);
         addPreferencesFromResource(R.xml.prefs);
     }
}

MdSharedPrefs类只包含一些getter和setter方法,用于检索/写入pref值。

有什么想法可以在平板电脑上显示OptionsMenu吗?

2个回答

4
根据文档所述:
选项菜单中的项目有两种不同的访问方式:通过MENU按钮或在操作栏(运行Android 3.0或更高版本的设备上)中。
在Android 3.0及更高版本中,选项菜单中的项目被放置在操作栏中,它出现在活动的顶部,代替了传统的标题栏。默认情况下,所有来自选项菜单的项目都被放置在溢出菜单中,用户可以通过触摸操作栏右侧的菜单图标打开它。但是,您可以将某些选择的菜单项直接放置在操作栏中作为“操作项”,以进行快速访问[...]。
因此,对于Android 3.0或更高版本,您只能在ActionBar中看到菜单项。
还要注意的是:
从Android 3.0(API级别11)开始,操作栏包含在使用Theme.Holo主题(或其后代之一)的所有活动中,这是当targetSdkVersion或minSdkVersion属性设置为“11”或更高版本时的默认主题。
但请注意,如果您有一个明确隐藏它的应用程序或活动主题,则ActionBar仅在不可见。
android:theme="@android:style/Theme.Holo.NoActionBar"

@artworkad 那我们现在该怎么办?我的minSdk是5,我可以使用兼容的package-v4。我们知道有些设备上没有物理选项按钮。 - Dr.jacky
@FrancescoVadicamo 您的回答是否意味着创建新的Android项目时,默认项目具有三个值文件夹。values-v11和values-v14中包含了决定主题的styles.xml.holo。保留它们就足以处理选项菜单吗? - Dr.jacky
1
@Dr.jacky,抱歉我不明白你想说什么!从Android 3.0开始,“选项菜单项”显示为位于屏幕顶部的操作栏中的“操作项”,因此您只需确保当前主题不隐藏操作栏即可。默认项目创建了一个名为“AppTheme”的自定义样式,对于Android >= 3.0 - 因此在values-v11\styles.xml中 - 其父级为Theme.HoloTheme.Holo是一个显示ActionBar的主题,因此使用AppTheme作为应用程序/活动主题,确保ActionBar可见。 - Francesco Vadicamo
如果我使用values-v11,那么在例如安卓4.0.4(API级别15)的三星Galaxy S3上会发生什么?它有选项菜单按钮。是否会有两个,ActionBar和选项菜单? - Dr.jacky
@Dr.jacky 正如我所说,从Android 3.0开始,就不再有“选项菜单”,所有项目都放置在操作栏上;如果有足够的空间并且您指定了此模式,则可以将“操作项”放置在操作栏上作为“按钮”,或者放置在右上角浮动菜单中(这不是旧的“选项菜单”,而只是显示更多操作项的一种方式!)。 Android 4.0仅引入了分割操作栏,因此在窄屏幕上有更多的空间用于操作“按钮”。请查看此处获取更多信息。 - Francesco Vadicamo
显示剩余4条评论

0
在平板电脑上,没有可以用来加载菜单的硬件按钮,您需要在res中创建两个文件夹:第一个称为values-11,第二个称为values-14。在这些文件夹内,放置这些样式(styles.xml),它们将在使用更高版本设备时替换值文件夹中的默认基础主题:

Res/values-11

<!--
    Base application theme for API 11+. This theme completely replaces
    AppBaseTheme from res/values/styles.xml on API 11+ devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
    <!-- API 11 theme customizations can go here. -->
</style>

Res/values-14

<!--
    Base application theme for API 14+. This theme completely replaces
    AppBaseTheme from BOTH res/values/styles.xml and
    res/values-v11/styles.xml on API 14+ devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- API 14 theme customizations can go here. -->
</style>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接