冲突关于paddingStart使用情况的lint消息

在API 17 / RTL支持发布后,我在清单中添加了以下内容

android:supportsRtl="true" 

这导致林特正确地给我这些警告,无论我paddingLeft /右在我的看法:

  • 考虑添加android:paddingStart =“8dp”以更好地支持从右到左的布局

  • 考虑添加android:paddingEnd =“8dp”以更好地支持从右到左的布局

我遵循这个android-developers blogpost中的指导,这意味着我们不需要创build一个新的layout-v17文件,而是可以同时使用paddingStart / End和paddingLeft / Right属性(左/右需要继续支持更低的minSdk)。


我刚刚从以前的Beta版本更新到Android Studio 1.0,并且注意到一个新的lint错误,它指出:

  • 此处引用的属性paddingStart可能会导致API 17以前的某些特定设备(当前最小为7)崩溃,

build议的修复方法是:

覆盖layout-v17中的资源

这是有道理的。 但是,创buildlayout-v17并从主布局文件夹中删除未使用的paddingStart / End后,原来的Lint警告再次出现,说我应该使用paddingStart / End。 它似乎不明白,我已经覆盖layout-v17中的文件。

有谁知道如何解决似乎是冲突林特错误/警告消息? 我知道我可以只是tools:ignore警告,但我希望有一个“适当”的解决scheme。


编辑(1/19/15):有一个android问题 ,我想象导致新的lint错误被添加到Android Studio。 这表明,“某些特定设备上的崩溃”是指API16上的less数三星平板电脑,其中paddingStart具有自己的定义,并在尝试parsing“8dp”时崩溃。

上述链接中的一些人build议使用layout-ldrtl文件夹来处理rtl方向,而不是使用paddingStart和paddingEnd。

我也有其他地方的build议,只要你发现用户有一个API16平板电脑,就可以覆盖LayoutInflator的Factory2,然后手动设置所有视图的属性。 这肯定会起作用,但看起来非常“手动”。

我不幸的是没有访问这些崩溃的设备之一,所以我无法validation为什么我没有find任何人在网上build议简单地把paddingStart放在/ layout-v17 /文件夹和paddingLeft in / layout /? 尽pipepaddingStart只在layout-v17中出现,那么API16三星平板电脑还是会继续崩溃吗?

你是正确的问题的根源 – 三星定义为paddingStartpaddingEnd保留的id的自定义属性。

我绕过这个的方式是提取填充属性,并把它们放入一个样式。 因此,对于SDK <17和SDK> = 17不同的版式,我有不同的风格( paddingLeft&Right in valuespaddingStart&End in values-v17 )。

这样,林特就不会再抱怨了。

它只是一个build议。 我希望你现在已经解决了你的问题。 如果您将最低SDK级别设置为低于4.1,则必须明确提及填充为paddingLeft和paddingStart。 对于4.1以上的SDK级别,可以使用paddingStart。 我猜(因为我以前从来没有面对过),因为你设置你的SDK级别2.2或以下4.1,Android SDK级别将疯狂。