2015-03-30 5 views
1

Вот мой EditText. Моя проблема в том, что Android игнорирует layout_marginEnd в Lollipop и выше и вместо этого использует layout_marginRight. См две скриншоты ниже:Android API 21 игнорирует layout_marginEnd и использует layout_marginRight вместо этого в EditText

<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.

Edit: @ErnirErlingsson пригвоздил: Нужно включить Android: supportsRtl в манифесте, чтобы использовать layout_marginEnd вместо layout_marginRight. Спасибо.

Edit 2: Однако обратите внимание, что в API 17 (правый скриншот) правый край берутся из layout_marginEnd в то время как андроид: supportsRtl ложна.

ответ

2

Один сменяет другой, если вы решили поддержать RTL в настоящее время или в будущем, вы всегда должны использовать marginStart и marginEnd вместо использования marginRight и MarginLeft, в противном случае вы отлично с ним.

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

Согласно соответствующей docs поддержки RTL должна быть отключена по умолчанию, и, следовательно, левый/правый края должны быть использованы. Насколько мне известно, это не отличается между версиями ОС, которые видны на скриншотах, которые вы отправили с вашим вопросом, чтобы точно, почему это происходит, немного загадка. Мое первое предположение заключается в том, что это имеет какое-то отношение к эмулятору, и я бы подтвердил это на реальных устройствах с соответствующими версиями ОС.

EDIT

При поддержке старых версий операционной системы вам действительно нужно добавить как к макету, но чтобы убедиться, что marginStart и marginEnd используются вам необходимо установить атрибут android:supportsRtl к истинной. Ознакомьтесь с первой ссылкой, которую я разместил выше для получения дополнительной информации.

+1

Я знаю, что конец заменяет право в API> = 17, однако я должен сохранить старый, поскольку я все еще поддерживаю API14. Кроме того, я пробовал это приложение на реальном устройстве Lollipop и так же, как здесь, Lollipop игнорирует новый атрибут layout_marginEnd. –

+1

Я отредактировал свой отзыв –

+0

Кто-нибудь знает, будет ли способ высасывать все дублирование позже, когда compat больше не понадобится? Какой-то отстой, чтобы сделать все это ... – Rob