API上的getWindow()。hasFeature()< 11

时间:2014-05-29 04:29:24

标签: android android-actionbar-compat

我需要检查是否已在ActionBarCompat实例上设置了叠加功能。 getWindow().hasFeature()方法仅适用于API 11及更高版本。

如何检查API上的功能< 11?

编辑:根据评论,{1}}方法应该可以从API 1获得,但它是受保护的范围,我需要从另一个类访问该功能。另一方面,getFeatures方法是我需要使用的方法,仅限API 11及更高版本。这是Android Studio向我显示的内容,应用程序在2.3.3设备上崩溃。

Image from AS

仅供参考,这里使用的活动类是一个自定义类,它从ActionBarCompat库扩展hasFeature。不知道这是否应该有所作为。

2 个答案:

答案 0 :(得分:3)

您可以使用The Reflection API访问private方法。

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

答案 1 :(得分:0)

您是否尝试过使用Support Library

Android 3.0(API级别11)中引入了操作栏,但如果您希望您的应用程序也支持旧版本的操作栏,则使用支持库使其与旧版本(Android 2.1及更高版本)兼容