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 版本时,您确实需要将两者都添加到您的布局中,但要确保使用 marginStart
和 marginEnd
,您需要设置 android:supportsRtl
属性为 true。查看我上面发布的第一个 link 以获取更多信息。
这是我的 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 版本时,您确实需要将两者都添加到您的布局中,但要确保使用 marginStart
和 marginEnd
,您需要设置 android:supportsRtl
属性为 true。查看我上面发布的第一个 link 以获取更多信息。