Java 当相应地设置目标和最小sdk时,为什么LayoutParams.MATCH_父级没有运行时异常?

Java 当相应地设置目标和最小sdk时,为什么LayoutParams.MATCH_父级没有运行时异常?,java,android,layout,Java,Android,Layout,关于使用match_parent pre 2.2的其他问题的答案表明,为了安全向后兼容,应该使用fill_parent 我注意到,当您的targetsdk设置为8或更大,而minsdk设置为7或更低时,使用match_parent或fill_parent是不相关的。我猜这是b/c,xml被编译成一个二进制blob,因此一旦应用程序打包到apk中,使用任何一个都是不相关的 我感到奇怪的是,为什么在java代码中的2.1设备上使用LayoutParams.MATCH_PARENT时没有运行时错误。在

关于使用match_parent pre 2.2的其他问题的答案表明,为了安全向后兼容,应该使用fill_parent

我注意到,当您的targetsdk设置为8或更大,而minsdk设置为7或更低时,使用match_parent或fill_parent是不相关的。我猜这是b/c,xml被编译成一个二进制blob,因此一旦应用程序打包到apk中,使用任何一个都是不相关的

我感到奇怪的是,为什么在java代码中的2.1设备上使用
LayoutParams.MATCH_PARENT
时没有运行时错误。在试图访问代码中的LayoutParams.MATCH_父级时,我希望看到NoSuchClassMember出现某种运行时异常


我猜这可能涉及到如何用java编译类文件。任何见解都值得赞赏。

据我所知,这两者完全相同。在这个例子中,它转换为相同的值(-1),我认为这个变化实际上只是正确的命名

您还可以检查其他问题:

请注意,如果在2.2版本之前的设备上使用match_parent,则运行应用程序可以正常工作,但SDK将触发错误

在你的评论之后。。。 不管你在什么平台上运行它,只在乎你用什么SDK来编译。。。尝试使用1.6或2.1 SDK构建时,会出现以下错误:

Description Resource    Path    Location    Type
error: Error: String types not allowed (at 'layout_width' with value 'match_parent').   main.xml    /MyProject/res/layout   line 7  Android AAPT Problem
在Eclipse中,您可以通过进入项目的属性、进入“Android”页面并更改“项目构建目标”来更改正在使用的SDK。我可以向您保证,如果您尝试使用2.2之前不存在的“match_parent”,它将打印错误

任何一种都可以。在代码中,它会警告您它已被弃用,但它们都是完全相同的东西


不知道谷歌为什么做出如此奇怪的改变。我喜欢上一个名称,因为它意味着它填充了父级的剩余空间,与之不匹配,但这是我的观点。

事实上,不,sdk不会触发错误。在emulator中的2.1 Google API上进行测试时,在xml中使用match_parent可以很好地工作(正如大家普遍同意的那样进行编译),但如果在java中使用
LayoutParams.match_parent
也可以很好地工作。没有抛出错误,它的功能符合预期。我想你忽略了这个问题的背景,如果我有一些让你感到困惑的话,对不起。如果您将targetsdk(如屏幕截图所示)设置为sdk 8或更高版本,然后编辑AndroidManifest.xml并设置android:minSdk=“4”,那么这就是讨论的内容。事实上,我感到好奇的是——或者我的问题的根源是,为什么java代码中2.1设备上的MATCH_PARENT没有运行时错误。也许这比android更与java相关,但我希望在尝试访问代码中的LayoutParams.MATCH_PARENT时,NoSuchClassMember会出现某种运行时异常。不,这没关系,因为它是一个常量,也是一个已知常量(与fill PARENT完全相同)。所有“常量变量”都转换为字节码中的实际值,因此,只要它们已知,就无法获得任何类型的异常。如果他们以前不知道,那么我们有一个特殊的情况需要检查。我不知道常数的情况,知道这一点很有帮助。谢谢顺便说一句,如果你想知道旧的API是否有问题,但你使用最新的API(正如谷歌最近建议的那样),你可以使用Lint。它有一个执行此检查的选项,尽管它在默认情况下被禁用。例如,如果您调用getActionBar(),它将向您发出警告/给出错误,因为它在API 10及以下版本中不可用。您很神奇,捕捉得很好-我必须确定地挖掘该选项。