我使用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?
答案 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如何使人们浪费无数小时来解决根本不需要存在的问题。