API 17 / RTL 支持发布后,我将以下内容添加到我的清单中
android:supportsRtl="true"
这导致 Lint 在我的视图中有 paddingLeft/Right 的地方正确地向我发出这些警告:
我按照此中的指导进行了此操作Android 开发者博客文章 http://android-developers.blogspot.com/2013/03/native-rtl-support-in-android-42.html,这意味着我们不需要创建新的layout-v17文件,而可以只使用paddingStart/End以及paddingLeft/Right属性(Left/Right需要继续支持较低的minSdk)。
我刚刚从之前的 Beta 版本更新到 Android Studio 1.0,并且注意到一个新的 lint 错误,其中指出:
- 此处引用的属性 paddingStart 可能会导致某些早于 API 17 的特定设备崩溃(当前最小值为 7)
建议的修复是:
覆盖layout-v17中的资源
这是有道理的。然而,在创建layout-v17并从主布局文件夹中删除未使用的paddingStart/End之后,原始的Lint警告再次出现,提示我应该使用paddingStart/End。它似乎不明白我已经覆盖了layout-v17中的文件。
有谁知道如何解决似乎冲突的 Lint 错误/警告消息?我知道我可以tools:ignore
警告,但我希望有一个“适当的”解决方案。
编辑(2015 年 1 月 19 日):有一个安卓问题 https://code.google.com/p/android/issues/detail?id=60055我认为这导致了新的 lint 错误被添加到 Android Studio 中。这表明“在某些特定设备上崩溃”是指 API16 上的少数三星平板电脑,其中 paddingStart 有自己的定义,因此当它尝试解析“8dp”时会崩溃。
上面链接中的一些人建议使用layout-ldrtl文件夹来处理rtl方向,而不是使用paddingStart和paddingEnd。
我还在其他地方提出过建议,只要您发现用户有 API16 平板电脑,就覆盖 LayoutInflator 的 Factory2,然后手动设置所有视图的属性。这肯定会起作用,但看起来非常“手动”。
不幸的是,我无法访问这些崩溃的设备之一,所以我无法验证为什么我没有在网上找到任何人建议简单地将 paddingStart 放在 /layout-v17/ 文件夹中,并将 paddingLeft 放在 /layout/ 中?尽管 paddingStart 仅出现在layout-v17 中,API16 三星平板电脑是否仍会继续崩溃?