openOptionsMenu не работает: неправильный SDK? - PullRequest
0 голосов
/ 26 декабря 2018

Я использую openOptionsMenu(), чтобы открывать меню в приложениях со специальным графическим интерфейсом - например, в приложениях, которые отображают только графику (полноэкранные приложения без панелей инструментов и т. Д.) При длительном нажатии на экран.

Я вижу, что раньше заставлял его работать на других приложениях, и я полагаю, что это было с помощью манифеста,

    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).

Сборка .Файл gradle в соответствии с интерфейсом Android Studio показывает:

    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 {
        }
    }

Как написано выше, файл AndroidManifest.xml в скомпилированном APK (после apktool -d) не упоминает какой-либо выбор SDK.

Я ожидаю, что приложение, скомпилированное для SDK 15, откроет (очень необходимое) меню при вызове openOptionsMenu().То, что скомпилированное приложение теперь делает после отладки, это вместо этого использовать метод, который будет / закрывать / меню (явно сатанинское намерение).

РЕДАКТИРОВАТЬ: информация о конкретном случае палачества Google openOptionsMenu() после некоторой версии SDK в функция openOptionsMenu не работает в ICS?

1 Ответ

0 голосов
/ 26 декабря 2018

Полагаю, я допустил ошибку.Я понял, что мой предыдущий, рабочий код не просто компилировался для SDK 15, он также содержал переопределение , как указано ниже, и как было предложено пользователем 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();
    }
}

Так что вполне возможно, что выбор SDK, хотя и более загадочный в Android-Gradle (который удаляет ссылки в Манифесте), не был проблемой.

Отмечу, что очень прискорбно, как Google удается заставить людей тратить бесчисленные часы на проблемы, которые вообще не должны существовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...