添加更高版本的语句?

时间:2011-05-24 13:35:37

标签: android sdk

我使用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,如果小于那个那么这些线不应该受到任何影响吗?

有任何线索吗?

5 个答案:

答案 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)