有关paddingStart使用的冲突lint消息

时间:2014-12-12 18:23:46

标签: android lint

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

android:supportsRtl="true"

这导致Lint在我的观点中无论在paddingLeft / Right的哪个地方都给我这些警告:

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

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

  •   

我按照这个android-developers blogpost中的指导做了这个,这暗示我们不需要创建一个新的layout-v17文件,而是可以同时使用paddingStart / End以及paddingLeft /正确的属性(左/右需要继续支持较低的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警告,但我希望有一个“正确”的解决方案。


编辑(1/19/15):我想到的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三星平板电脑仍会继续崩溃吗?

2 个答案:

答案 0 :(得分:1)

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

我通过它的方式是提取填充属性并将它们放入样式中。因此,我没有为SDK&lt; 17和SDK&gt; = 17设置不同的布局,而是为它们设置了不同的样式(paddingLeft&Right中的valuespaddingStart&End中的values-v17。< / p>

这样,Lint就会停止抱怨它。

答案 1 :(得分:0)

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