【问题标题】:Android match_parent backwards compatibility issue won't compile eclipseAndroid match_parent 向后兼容性问题不会编译 Eclipse
【发布时间】:2016-03-24 00:06:32
【问题描述】:

注意:在解析 XML 资源时,Android 会忽略 XML 属性 当前设备不支持。因此您可以安全地使用 XML 只有较新版本才支持的属性,无需担心 关于旧版本在遇到该代码时会中断。为了 例如,如果您设置 targetSdkVersion="11",则您的应用包含 默认情况下,Android 3.0 及更高版本上的 ActionBar。然后添加菜单项 到动作栏,你需要设置 android:showAsAction="ifRoom" in 您的菜单资源 XML。在跨版本 XML 中执行此操作是安全的 文件,因为旧版本的 Android 只是忽略 showAsAction 属性(也就是说,您不需要在 res/menu-v11/)。

来源:http://developer.android.com/training/basics/supporting-devices/platforms.html

^ 尽管声称 eclipse 拒绝从同一站点 here 编译未更改的片段基础版本。

给出的错误信息是:

不允许使用字符串类型(在 'layout_width' 处有值 'match_parent')。

我是否可以在 XML 中抑制此错误,例如某种无声标记,表明它们仅适用于特定的 API 级别?理想情况下,我希望项目能够在 Eclipse 中运行,并且还保持 1.6 的向后兼容性。

注意:所有其他错误都与未生成 R 有关,因此这是唯一的第一代错误。

清单文件确实包含该行

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />

【问题讨论】:

标签: android compatibility


【解决方案1】:

您可以在较新的 API 中进行编译,并且应用程序仍可在旧 API 中运行,从而消除这些错误,只要您不使用 .java 文件中的任何不受支持的功能,而无需先提供相关检查。我以为我必须针对最低的 API 而不是最高的 API 进行编译,但我已经使用 1.6 AVD 进行了测试,以运行使用 4.0 编译的项目,并且它运行完美。

【讨论】:

    【解决方案2】:

    您是否尝试使用“fill_parent”而不是“match_parent”?如果您想为不同的 api 级别设置不同的属性值,您还可以通过将它们放在 values-4 (1.6 android) 和 values (其他所有) 文件夹中来创建一个带有这些属性的样式 xml 条目。

    【讨论】:

    • 感谢您的快速回复,如果我可以投票,我会的。有趣的是,我认为 values-4 也可以。事实证明,您可以在较新的 API 中编译,并且应用程序仍可在旧 API 中运行,只要您不使用任何不受支持的功能,我想我必须针对最低版本进行编译API 不是最高的。
    【解决方案3】:

    如果您要针对 API 8 或更低版本构建应用,则需要使用 fill_parent。也就是说,如今大多数开发人员都使用 API 8 作为最低 sdk 来支持,因此您确实应该考虑针对较新的 API 构建您的应用程序。

    【讨论】:

    • 感谢您的快速回复,如果我可以投票,我会的。我会考虑这些建议,但除非必要,否则我不想失去兼容性(我仍然计划使用更高的 API 特定功能)。事实证明,您可以在较新的 API 中进行编译,只要您不使用任何不受支持的功能,应用程序仍然可以在旧 API 中运行,我想我必须针对最低的 API 而不是最高的 API 进行编译。跨度>
    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多