我使用1.6即API 4来构建我的应用程序。更高版本支持几种命令。我想编写这些命令,使应用程序更兼容更高版本。就像,我使用Tabs。我想使用setLeftStripDrawable和setRightStripDrawable,但API 8支持它们。
我写了类似的东西:// I want these lines to come into affect only if the device SDK is greater than 7 as SDK of below 7, doesn't support these methods.
if (android.os.Build.VERSION.SDK_INT > 7) {
tw.setLeftStripDrawable(R.drawable.tab_selected_bar_left_v4); // TabWidget
}
编辑:我想将setLeftStripDrawable设置为我的应用中使用的标签。在我的清单中,我有使用-sdk android:minSdkVersion =“4”。如果我按上面的方式编写行并在2.3中编译它,它就会成功编译。当我在1.6中运行时,我得到“java.lang.VerifyError”。如果我删除那些留置并再次运行1.6,它可以正常工作。
仅当设备SDK api为>时,我该怎么做才能执行这些行7,如果小于那个那么这些线不应该受到任何影响吗?
有任何线索吗?
答案 0 :(得分:3)
if (Build.VERSION.SDK_INT > 7) {
...
}
答案 1 :(得分:2)
我认为你应该使用这样的东西。我是这样做的,所以可能会有一些错误。
try {
Method twMethod = TabWidget.class.getMethod("setLeftStripDrawable", new Class[] { int.class });
twMethod.invoke(tw, R.drawable.yourdrawable);
} catch (NoSuchMethodException e) {
/* not supported */
} catch (IllegalArgumentException e) {
/* wrong class provided */
} catch (IllegalAccessException e) {
/* Java access control has denied access */
} catch (InvocationTargetException e) {
/* method has thrown an exception */
}
答案 2 :(得分:1)
您可以尝试查看Android反射。我自己还没有使用它,但据我所知,你可以测试你知道名字的类和方法。然后你可以实例化并使用它们。
您可以在此处阅读一些基础知识:http://www.tutorialbin.com/tutorials/85977/java-for-android-developers-reflection-basics
答案 3 :(得分:1)
以下是使用反射的一些示例Android代码,它们执行类似的操作。它从Display类调用getRotation()方法;该方法仅存在于SDK 8+中。我在我的一个应用程序中使用它并且它可以工作:
//I want to run this: displayrotation = getWindowManager().getDefaultDisplay().getRotation();
//but the getRotation() method only exists in SDK 8+, so I have to call it in a sly way, using Java "reflection"
try{
Method m = Display.class.getMethod("getRotation", (Class[]) null);//grab the getRotation() method if it exists
//second argument above is an array containing input Class types for the method. In this case it takes no inputs.
displayrotation = (Integer) m.invoke(getWindowManager().getDefaultDisplay(),(Object[]) null);
//again, second argument is an array of inputs, in this case empty
}catch(Exception e){//if method doesn't exist, take appropriate alternate actions
Log.w("getRotation","old OS version => Assuming 90 degrees rotation");
displayrotation = Surface.ROTATION_90;
}
答案 4 :(得分:-1)