我需要检查是否已在ActionBarCompat
实例上设置了叠加功能。 getWindow().hasFeature()
方法仅适用于API 11及更高版本。
如何检查API上的功能< 11?
编辑:根据评论,{1}}方法应该可以从API 1获得,但它是受保护的范围,我需要从另一个类访问该功能。另一方面,getFeatures
方法是我需要使用的方法,仅限API 11及更高版本。这是Android Studio向我显示的内容,应用程序在2.3.3设备上崩溃。
仅供参考,这里使用的活动类是一个自定义类,它从ActionBarCompat库扩展hasFeature
。不知道这是否应该有所作为。
答案 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及更高版本)兼容