从PhoneGap Build应用程序中删除系统菜单按钮

时间:2015-06-21 08:58:21

标签: android cordova contextmenu

我的所有PhoneGap Build应用程序都包含系统菜单按钮:

enter image description here

它在我的所有设备上都无法使用(点击它不起作用),所以到目前为止我只是忽略了它。

但是,今天我收到的反馈是,在某些Android设备上按此按钮只会让我的应用程序出现令人讨厌的系统错误。因此,这不仅是一个UI问题,而且是一个真正的痛苦。

在使用PhoneGap Build构建应用程序时,如何永久删除此按钮?

请注意,此问题不是this one的副本,因为given answer不回答我的问题。这是PhoneGap Build only问题,当我使用PhoneGap Build构建我的应用程序时,我无法访问.java个文件,因此我无法应用建议的解决方案。

1 个答案:

答案 0 :(得分:2)

Android 4.x(API级别14)中删除了系统菜单的想法(但不支持)。使用此版本或更新版本的Android的大多数设备应该忽略用户按此按钮。但是,有报道称,某些事情会因此而崩溃。

有两种方法可以解决这个问题。

完全删除系统菜单按钮

根据PGB支持的this answer,当您将android:minSdkVersion中的config.xml设置为14或更高的值时,您将能够在没有系统的情况下构建PhoneGap应用程序菜单。

您可以使用general preferences tag

设置此属性
<preference name="android-minSdkVersion" value="14" />
<preference name="android-targetSdkVersion" value="21" />

并且这些值将在构建期间复制到usesSdk文件中的AndroidManifest.xml属性。

或者您可以使用config-file style

<widget xmlns           = "http://www.w3.org/ns/widgets"
    xmlns:gap           = "http://phonegap.com/ns/1.0"
    xmlns:android       = "http://schemas.android.com/apk/res/android"
    id                  = "com.lumberg.greeeaaat"
    minSdkVersion       = "14"
    targetSdkVersion    = "14"
    version             = "1.0.0">

在这种情况下,必须设置android命名空间(即xmlns:android = "http://schemas.android.com/apk/res/android"),否则您的config.xml文件在构建期间不会通过标准XML验证。

但是,此解决方案将完全阻止早于4.x的Android用户安装您的应用!因此,如果这对你很重要,你必须仔细考虑。

Here您会找到有关minSdkVersiontargetSdkVersion之间差异的信息。

我们正在谈论(在Android 4.x +的最新移动设备上)虚拟菜单按钮,而许多Android 2.x设备都有硬件菜单按钮,必须以某种方式处理,不能简单地删除&#34;按系统或应用程序本身。出于这个原因,可能没有任何其他方法可以从Android 4.x上运行的应用程序中删除虚拟菜单按钮,除了声明此特定应用程序是为Android 4.x设计的至少,因此无法安装在任何旧版本上。说,但是真的

处理系统菜单按钮正常按

如果您希望自己的应用程序支持早于4.x的Android版本,或者由于其他原因无法实现上述解决方案,那么您必须习惯,您将看到系统菜单按钮。周期。

您可以做的一件事就是handle presses on that button

var app = 
{
    init: function()
    {
        document.addEventListener('deviceready', app.deviceReadyHandler, false);
    },

    deviceReadyHandler: function()
    {
        document.addEventListener('menubutton', app.menuButtonHandler, false);
    },

    menuButtonHandler: function()
    {
        //Do nothing...
    }
};

app.init();

对于大多数设备(那些忽略用户按下系统菜单按钮的设备),什么都不会改变。虽然在这种情况下崩溃的这一小部分设备现在不再崩溃,因为系统菜单的按下处理。

如果是此解决方案,您的应用程序仍可安装在早于4.x 的Android上。