释放API 17/RTL支持后,我在 list 中添加了以下内容
android:supportsRtl="true"
导致Lint在我认为paddingLeft/Right的任何地方正确地给我这些警告:我按照android-developers blogpost中的指导进行了此操作,这意味着我们不需要创建新的layout-v17文件,而可以只使用paddingStart/End以及paddingLeft/Right属性(Left/Right需要继续支持较低的minSdk)。
我刚刚从先前的Beta版本对Android Studio 1.0进行了更新,并注意到一个新的lint错误,该错误指出:
和建议的解决方法是:
这是有道理的。但是,在创建layout-v17并从主布局文件夹中删除未使用的paddingStart/End之后,原始的Lint警告又出现了,提示我应该使用paddingStart/End。似乎我不了解我已经覆盖了layout-v17中的文件。
有谁知道如何解决似乎不一致的Lint错误/警告消息?我知道我可以
tools:ignore
警告,但我希望有一个“适当的”解决方案。编辑(1/19/15):我想象有一个android issue导致新的lint错误被添加到Android Studio中。这表明“某些特定设备上的崩溃”是指API16上的少数Samsung平板电脑,其中paddingStart有其自己的定义,因此当尝试解析“8dp”时会崩溃。
上面链接中的某些人建议使用layout-ldrtl文件夹来处理rtl方向,而不要使用paddingStart和paddingEnd。
每当您发现用户具有API16数位板,然后手动设置所有 View 的属性时,我还建议在其他地方覆盖LayoutInflator的Factory2。这当然可以,但是似乎非常“手动”。
不幸的是,我无法访问这些崩溃的设备之一,因此我无法验证为什么我没有找到任何在线建议仅将paddingStart放在/layout-v17/文件夹中并将paddingLeft放在/layout/中的人吗?尽管paddingStart仅出现在layout-v17中,但API16 Samsung平板电脑是否仍会以某种方式继续崩溃?
最佳答案
您对问题的根本原因是正确的-Samsung为paddingStart
或paddingEnd
保留的id定义了一个自定义属性。
我绕过此方法的方法是提取填充属性并将其放入样式中。因此,我没有为SDK = 17使用不同的布局,而是为它们使用了不同的样式(paddingLeft&Right
中的values
和paddingStart&End
中的values-v17
)。
这样,Lint将不再提示它。