getWindow (). hasFeature () для API <11

1

Мне нужно проверить, была ли функция наложения установлена на экземпляр ActionBarCompat. Метод getWindow().hasFeature() доступен только для API 11 и выше.

Как проверить функцию на API <11?

EDIT: на основе комментария метод getFeatures должен быть доступен из API 1, но это защищенная область, и мне нужно получить доступ к этой функции из другого класса. Метод hasFeature, с которым мне нужно использовать, с другой стороны, это только API 11 и выше. Это то, что Android Studio показывает мне, и приложение падает на устройстве 2.3.3.

Изображение 174551

FYI, класс активности, используемый здесь, представляет собой настраиваемый класс, который расширяет ActionBarActivity из библиотеки ActionBarCompat. Не знаю, должно ли это иметь значение.

  • 0
    эй, метод getFeature () доступен из API 1, проверьте этот developer.android.com/reference/android/view/…
  • 1
    getFeatures () является защищенным методом. Мне нужно получить доступ к функции из другого класса. hasFeature () - публичная версия, о которой был этот вопрос.
Теги:
android-actionbar-compat

2 ответа

3
Лучший ответ

Вы можете использовать private методы, используя API Reflection.

boolean hasFeature(int feature) {
    Window window = getWindow(); //get the window instance.
    if (android.os.Build.VERSION.SDK_INT >= 11) { // if we are running api level 11 and later
        return window.hasFeature(feature); //call hasFeature
    } else {
        try {
            Class c = window.getClass();
            Method getFeatures = c.getDeclaredMethod("getFeatures");//get the getFeatures method using reflection
            getFeatures.setAccessible(true);//make it public
            Integer features = getFeatures.invoke(window, null); //invoke it
            return (features.intValue() & (1 << feature)) != 0; //check if we have the feature and return the result.
        } catch (Exception e) {
            return false;//in case invocation fails with any reason
        }
    }
}
  • 0
    Разве медленное отражение на Android?
  • 0
    Ну, условно говоря, да, это немного медленнее, но это всего лишь один звонок, насколько медленным это может быть?
Показать ещё 1 комментарий
0

Вы пробовали использовать библиотеку поддержки.

Панель действий введена в Android 3.0 (уровень API 11), но если вы хотите, чтобы ваше приложение также поддерживало панель действий в более старых версиях, используйте библиотеку поддержки, чтобы она совместима со старыми версиями (Android 2.1 и выше)

  • 0
    Это именно то, что я использую, но библиотека поддержки не имеет реализации этого метода

Ещё вопросы

Сообщество Overcoder
Наверх
Меню