openOptionsMenu不起作用:SDK错误?

时间:2018-12-26 11:03:47

标签: android android-studio build.gradle

我使用openOptionsMenu()在具有特殊GUI的应用程序中打开菜单,例如,长按屏幕时仅显示图形的应用程序(没有工具栏的全屏应用程序等)。

我可以看到我曾经在其他应用程序上使它工作,并且我想它是通过在清单中使用的,

    android:minSdkVersion="15"
    android:targetSdkVersion="15"

我现在无法执行此工作(代码将是):

    myButton.setOnLongClickListener(
            new OnLongClickListener() {
                @Override public boolean onLongClick(View v) {
                    openOptionsMenu();
                    return false;
                }
            }
            );

我认为Android Studio使用了错误的SDK。实际上,

  • 我在清单中输入的值(“ min”和“ target”设置为15)被覆盖;

  • 所使用的值应该是build.gradle的值-再次,我将“ compile”,“ min”和“ target”设置为15,但看不到该应用程序 工作正常,我认为可能没有选择SDK;

  • 当我检查生成的APK时,SDK的清单条目(minSdkVersion,targetSdkVersion)丢失了。

根据Android Studio界面的 build.gradle 文件显示:

    android {
        compileSdkVersion 15
        buildToolsVersion "28.0.2"
        defaultConfig {
            applicationId '[...AppID...]'
            minSdkVersion 15
            targetSdkVersion 15
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            }
        }
        productFlavors {
        }
    }

如上所述,已编译的APK(在apktool -d之后)中的AndroidManifest.xml没有提及任何SDK选择。

我希望为SDK 15编译的应用会在调用openOptionsMenu()时打开(非常需要)菜单。现在,已编译的应用程序在调试时会执行的操作是改为使用/ close /菜单的方法(显然是撒旦意图)。

编辑:有关在某些SDK版本之后Google屠杀openOptionsMenu()的具体情况的信息,请访问 openOptionsMenu function not working in ICS?

1 个答案:

答案 0 :(得分:0)

我想我做错了。 我意识到我过去的工作代码不仅针对SDK 15进行了编译,还包含如下的 override ,并由用户 tallicalord 在先前链接的页面中建议:

@Override public void openOptionsMenu() {
    Configuration cfg = getResources().getConfiguration();
    if( (cfg.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)>Configuration.SCREENLAYOUT_SIZE_LARGE){
        int shelf = cfg.screenLayout;
        cfg.screenLayout = Configuration.SCREENLAYOUT_SIZE_LARGE;
        super.openOptionsMenu();
        cfg.screenLayout = shelf;
    }else{
        super.openOptionsMenu();
    }
}

因此,即使在Android-Gradle中更为神秘(它会删除清单中的引用),SDK的选择也可能不是问题。

我要指出的是,非常不幸的是Google如何使人们浪费无数小时来解决根本不需要存在的问题。