Закусочная справа налево

Я хочу отобразить текст с действием в SnackBar библиотеки поддержки дизайна.
Мой язык написан справа налево. Итак, как я могу изменить текст SnackBar и направление действия?
Примерно так:

введите описание изображения здесь


person Seyyed    schedule 07.02.2016    source источник


Ответы (6)


Наконец, из ответов и других поисков я нашел это решение:

Snackbar snackbar =
    Snackbar.make(view, "My right2left text", Snackbar.LENGTH_LONG)
            .setAction("Action", new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                }
             });

Установите направление справа налево:

ViewCompat.setLayoutDirection(snackbar.getView(),ViewCompat.LAYOUT_DIRECTION_RTL);

Не забудьте это для показа закусочной:

snackbar.show();

ОБНОВЛЕНИЕ

Поскольку у вас есть Text и Action как TextView, вы можете использовать для них другие методы TextView. как setTypeface(), setTextSize() и так далее.

Установить шрифт для текста:

TextView text = snackbar.getView().findViewById(android.support.design.R.id.snackbar_text);
text.setTypeface(yourTypeface);

Установите шрифт для действия:

TextView action = snackbar.getView().findViewById(android.support.design.R.id.snackbar_action);
action.setTypeface(yourTypeface);
person Seyyed    schedule 10.12.2017
comment
Используйте ViewCompat из android.support.v4.view.ViewCompat для Android ниже 17 Как в stackoverflow.com/questions/30463608/. - person M at; 14.12.2017
comment
просто и полезно - person taha; 22.05.2019

просто добавьте эти коды:

В манифесте Android под тегом приложения сохраните это

андроид:supportsRtl="истина"

и это :

Snackbar snackbar = Snackbar.make(getView(), "Text", Snackbar.LENGTH_SHORT);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    TextView view1 = (TextView)snackbar.getView().findViewById(android.support.design.R.id.snackbar_text);
    view1.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
}

snackbar.show();
person Ali Edp    schedule 09.01.2017
comment
Хорошо, но это полезно, если вы хотите использовать направление RTL для своего приложения. В некоторых случаях вы хотите использовать направление LTR для приложения и RTL для некоторых виджетов. - person Seyyed; 10.01.2017

вы должны установить это на основе Local. Android поддерживает эту функцию.

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

В манифесте Android под тегом приложения сохраните это

android:supportsRtl="true"

определить такой метод в классе Utils

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

Используйте этот репозиторий в качестве справки и реализуйте его для закусочной.

https://github.com/semsamot/ActionBarRTLizer.git

person GvSharma    schedule 07.02.2016
comment
Спасибо, а как насчет уровня API 17-? Минимальный SDK моего приложения равен 14. - person Seyyed; 07.02.2016
comment
это не лучшая практика. лучший способ избежать чего-то странного, что может случиться с любителями языка RTL в разработке приложений для Android, - это создать собственный макет RTL и раздуть его повсюду в приложении, например. панель инструментов с настраиваемой компоновкой RTL имеет лучшую производительность в каждом API, чем выбрать поддержку Android RTL и заставить макет быть RTL. так это мой опыт. спасибо терпеливый читатель - person Setmax; 01.10.2016

Я решил эту проблему, установив пользовательский макет для макета закусок в соответствии с этой ссылкой.

настройка макета закусочной

person Hamidreza Shokouhi    schedule 11.07.2016

Только вам нужно:

         Snackbar snackbar=Snackbar.make(v, "آیا از حذف کامل این مورد مطمئن هستید؟", Snackbar.LENGTH_LONG)
                    .setAction("حذف", new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                           //[email protected]
                           //09155336168
                        }
                    });
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                View snack = snackbar.getView();
                snack.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
            }

            snackbar.show();
person Reza    schedule 15.02.2019

person    schedule
comment
Пожалуйста, объясните, как и почему ваш код решает проблему, потому что в StackOverflow не приветствуются ответы, содержащие только код. Кроме того, вы могли бы объяснить, почему ваш ответ превосходит предыдущие более старые ответы (в основном принятые). - person Lukas Körfer; 06.04.2017