【问题标题】:Conflicting lint messages regarding paddingStart usage关于 paddingStart 使用的冲突 lint 消息
【发布时间】: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 三星平板电脑是否仍会继续崩溃?

【问题讨论】:

  • 这只是一个建议。我希望你现在已经解决了你的问题。

标签: android lint


【解决方案1】:

这只是一个建议。我希望你现在已经解决了你的问题。 如果您将最低 SDK 级别设置为低于 4.1,那么您必须将填充明确提及为 paddingLeft 和 paddingStart。对于 4.1 以上的 SDK 级别,可以使用 paddingStart。我猜(因为我以前从未遇到过),当您将 SDK 级别设置为 2.2 或低于 4.1 时,android sdk 级别会发疯。

【讨论】:

  • 不幸的是,事情没那么简单。正如我的问题中提到的,在 Android Studio 1.0 更新引入了一个新的 lint 错误之前,我最初都有这两个错误,指出我们不应该在 API 17 以下的任何版本的 xml 文件中使用 paddingStart。我发布的 lint 错误非常清楚地说明了这一点并已备份通过这个问题:(code.google.com/p/android/issues/detail?id=60055)。
【解决方案2】:

您对问题的根本原因是正确的 - 三星为为 paddingStartpaddingEnd 保留的 id 定义了一个自定义属性。

我绕过它的方法是提取填充属性并将它们放入样式中。因此,我没有为 SDK=17 设置不同的布局,而是为它们设置了不同的样式(values 中的 paddingLeft&Rightvalues-v17 中的 paddingStart&End)。

这样,Lint 将不再抱怨它。

【讨论】:

  • 我养成了一个习惯,即使用值 17 或更高的样式中定义的开始/结束来定义所有内容。在所有情况下都不是绝对必要的,但它让我不必担心它,让我安心,可能还有时间。
猜你喜欢
  • 1970-01-01
  • 2018-04-30
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 2016-03-23
相关资源
最近更新 更多