2013-07-07 4 views
14

Я создаю приложение для Android для правостороннего языка. И я использую ActionBarSherlock (совместимую панель инструментов панели задач Android).
То, что я точно хочу, - это изменить направление действия панели действий в RTL, даже если пользователь не задает язык Locale по умолчанию RTL.
Если у кого-то есть идея даже для стандартного бара Android, это ценно и может помочь, пожалуйста, поделиться им.
Thanksизменить направление действия стрелки справа налево

+0

вы нашли решение? –

+0

У меня нет хорошего решения, но я еще не тестировал решение «semsamot» о «RTLizer». Если вы проверили это, расскажите мне об этом. Благодарю. – Aliaaa

ответ

1

Я уверен, что вы не сможете делать то, что вы просите. Шаблон ActionBar очень специфичен, а поддерживающие его библиотеки будут поддерживать только определенный шаблон (в котором есть значок слева вверху, а затем выделение заголовка и кнопки действий справа).

Изменение теста так же просто, как изменение языкового стандарта и текста в приложении (как вы уже упоминали).

Изменение положения элементов внутри самого ActionBar не поддерживается библиотеками, поддерживающими стандартный шаблон ActionBar, поскольку то, что вы описываете, не поддерживается шаблоном пользовательского интерфейса.

Я думаю, вы должны оставить AB как есть. Нет необходимости переключать порядок, так как в любом случае нет правого-левого положения, и изменение этого будет крайне затруднительным для ваших пользователей.

Подводя итог, вы не сможете этого с существующими библиотеками - и вы, вероятно, не должны так или иначе.

+0

Но другие сделали это довольно хорошо взглянуть на это: https://play.google.com/store/apps/details?id=com.hamrahyar.nabzebazaar – Aliaaa

+0

Я предполагаю, что они использовали собственный макет для создания этого элемент. Я думаю, что реализация native (или ActionBarSherlock) не поддерживает это в это время (увидит, есть ли у кого-то другой ответ). – Booger

+0

@Booger Это возможно сейчас! (см. мой ответ) – semsamot

52

С Android API Level 17+ он поддерживает RTL изначально. Чтобы заставить весь ваш макет быть RTL, включая ActionBar, выполните следующие действия.

Корректировать AndroidManifest.xml и добавьте android:supportsRtl="true" в свой <application> тег, а затем добавьте следующую строку в верхней части вашей деятельности OnCreate() метод forceRTLIfSupported();, а затем вставить функцию последующей в вашей деятельности.

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) 
private void forceRTLIfSupported() 
{ 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){ 
     getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); 
    } 
} 

Конечно, это полезно только для отладки. Используйте View.LAYOUT_DIRECTION_LOCALE для сборки, чтобы ваш макет был изменен только тогда, когда пользователь выбрал расположение системы/язык aka locale, поддерживающий RTL.

Надеюсь, что это поможет.

+1

Благодарим вас за ответ. однако мне нужен ответ для поддержки совместимости для более низких версий sdk, если существует ответ! – Aliaaa

+0

Спасибо.Очень хорошо. –

+1

К сожалению, это RTL весь макет. Я просто хочу изменить направление Action bar не во всех приложениях. что я могу сделать? – Kenji

2

Booger is right. Приложение «Nabz Bazar», которое вы упомянули, не выравнивается справа на каждой версии Android. Как вы можете видеть here АБС на самом деле ничего не делает на Android 4.0 или новее, а скриншоты этого приложения находятся на 4.2 android.

5

Мы должны верить мощное правило в программировании:

Все будет возможно, когда вы знаете свои инструменты.

Итак, теперь вы можете использовать эту библиотеку, чтобы действительно RTLize ваших actionbars: https://github.com/semsamot/ActionBarRTLizer

И, конечно, она совместима с уровня API 7+.

+0

* Невозможно разрешить символ «ActionBarRtlizer» * (я думаю, вы забыли упомянуть, что мы должны импортировать, чтобы исправить эту проблему) –

0

использовать это, это будет сделать макет из РТЛ, но это родитель корень вашего XML

android:layoutDirection="rtl" 
    android:textDirection="rtl" 
Смежные вопросы