Android API 21 忽略 layout_marginEnd 并在 EditText 中使用 layout_marginRight

Android API 21 ignores layout_marginEnd and uses layout_marginRight instead in EditText

这是我的 EditText。 我的问题是 Android 忽略了 Lollipop 及更高版本中的 layout_marginEnd 并使用 layout_marginRight 代替。 请参阅下面的两个屏幕截图:

<EditText
        android:id="@+id/foo_count_edit_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/foo_container"
        android:layout_marginEnd="20dp"
        android:layout_marginRight="100dp"
        android:layout_marginTop="-6dp"
        android:hint="@string/foo_default_value"
        android:imeOptions="actionDone"
        android:inputType="number"/>

可以看出,在 API 21(左)中,边距是 100dp,取自 layout_marginRight 而不是 layout_marginEnd。

编辑: @ErnirErlingsson 搞定了:需要在清单中启用 android:supportsRtl 才能使用 layout_marginEnd 而不是 layout_marginRight。 谢谢

编辑 2: 但是请注意,在 API 17(右侧屏幕截图)中,右边距取自 layout_marginEnd,而 android:supportsRtl 为假。

一个替代另一个,如果您现在或将来决定支持 RTL,您应该始终使用 marginStart 和 marginEnd 而不是 使用 marginRight 和 marginLeft,否则您可以后者。

http://developer.android.com/about/versions/android-4.2.html#RTL

根据相应的 docs RTL 支持应默认禁用,因此应使用 left/right 边距。据我所知,这在您随问题发布的屏幕截图中可见的 OS 版本之间没有区别,因此究竟为什么会发生这种情况有点神秘。我的第一个猜测是这与模拟器有关,我会在具有相应 OS 版本的实际设备上确认这一点。

编辑

支持旧的 OS 版本时,您确实需要将两者都添加到您的布局中,但要确保使用 marginStartmarginEnd,您需要设置 android:supportsRtl 属性为 true。查看我上面发布的第一个 link 以获取更多信息。