【发布时间】:2015-02-11 12:37:45
【问题描述】:
API 17 / RTL 支持发布后,我在清单中添加了以下内容
android:supportsRtl="true"
这导致 Lint 在我的视图中有 paddingLeft/Right 的地方正确地给了我这些警告:
考虑添加 android:paddingStart="8dp" 以更好地支持从右到左的布局
考虑添加 android:paddingEnd="8dp" 以更好地支持从右到左的布局
我是按照android-developers blogpost 中的指导进行的,这意味着我们不需要创建新的 layout-v17 文件,而是可以同时使用 paddingStart/End 以及 paddingLeft/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 日): 我想有一个 android issue 导致新的 lint 错误被添加到 Android Studio。这表明“某些特定设备上的崩溃”是指 API16 上的少数三星平板电脑,其中 paddingStart 有自己的定义,因此在尝试解析“8dp”时会崩溃。
上面链接中有人建议使用 layout-ldrtl 文件夹来处理 rtl 方向,而不是使用 paddingStart 和 paddingEnd。
我在其他地方也有过建议,只要您发现用户拥有 API16 平板电脑,就可以覆盖 LayoutInflator 的 Factory2,然后手动设置所有视图的属性。这肯定会起作用,但它似乎非常“手动”。
不幸的是,我无法访问这些崩溃的设备之一,所以我无法验证为什么我没有找到任何在线建议将 paddingStart 放在 /layout-v17/ 文件夹中,并将 paddingLeft 放在 /layout/ 中的人?尽管 paddingStart 仅存在于 layout-v17 中,但 API16 三星平板电脑是否仍会继续崩溃?
【问题讨论】:
-
这只是一个建议。我希望你现在已经解决了你的问题。