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

时间:2015-03-30 12:07:53

标签: android android-layout android-5.0-lollipop margins

这是我的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"/>

enter image description here

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

修改: @ErnirErlingsson Nailed它:需要在清单中启用android:supportsRtl才能使用layout_marginEnd而不是layout_marginRight。 感谢。

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

1 个答案:

答案 0 :(得分:2)

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

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

根据相应的docs RTL支持,默认情况下应禁用,因此应使用左/右边距。据我所知,在你用你的问题发布的屏幕截图中可见的操作系统版本之间没有区别,因此确切地说这种情况发生的原因有点神秘。我的第一个猜测是,这与模拟器有关,我会在具有相应操作系统版本的实际设备上确认这一点。

修改

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