在发布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三星平板电脑仍会继续崩溃吗?
答案 0 :(得分:1)
您对该问题的根本原因是正确的 - 三星为paddingStart
或paddingEnd
保留的ID定义了自定义属性。
我通过它的方式是提取填充属性并将它们放入样式中。因此,我没有为SDK< 17和SDK> = 17设置不同的布局,而是为它们设置了不同的样式(paddingLeft&Right
中的values
和paddingStart&End
中的values-v17
。< / p>
这样,Lint就会停止抱怨它。
答案 1 :(得分:0)
这只是一个建议。我希望你现在已经解决了你的问题。 如果将最低SDK级别设置为低于4.1,则必须明确提及padding为paddingLeft和paddingStart。对于4.1以上的SDK级别,您可以使用paddingStart。我猜测(因为我之前从未遇到过),当你将SDK级别设置为2.2或低于4.1时,android sdk级别会变得疯狂。