有关paddingStart使用的冲突lint消息

tab*_*ina 37 android lint

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

android:supportsRtl="true"
Run Code Online (Sandbox Code Playgroud)

这导致Lint在我的视图中无论我在paddingLeft/Right中的哪个位置都正确地给了我这些警告:

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

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

我按照这个android-developers博文中的指导做了这个,这暗示我们不需要创建一个新的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发出警告,但我希望有一个"正确"的解决方案.


编辑(1/19/15):我想到了一个安卓问题,导致新的lint错误被添加到Android Studio中.这表明"某些特定设备上的崩溃"是指API16上的一些三星平板电脑,其中paddingStart有自己的定义,并且当它试图解析"8dp"时崩溃.

上面链接中的某些人建议使用layout-ldrtl文件夹来处理rtl方向,而不是使用paddingStart和paddingEnd.

当你发现用户有一个API16平板电脑,然后手动设置你所有视图的属性时,我也在其他地方建议覆盖LayoutInflator的Factory2.这肯定会奏效,但看起来非常"手动".

我很遗憾没有访问其中一个崩溃的设备,所以我无法验证为什么我没有找到任何人在网上建议简单地将paddingStart放在/ layout-v17 /文件夹中,并将paddingLeft放在/ layout /中?尽管paddingStart只存在于layout-v17中,API16三星平板电脑仍会继续崩溃吗?

小智 0

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