Есть ли способ установить / переопределить свойство supports-RTL в манифесте во время выполнения в Android? Я хочу иметь возможность программно переключать макет без фактического изменения локали. Судя по тому, что я искал, похоже, что мне нужно установить направление макета для приложения и каждого действия. Есть ли решение попроще?
Обновлять:
Из этот ответ, можно изменить направление макета сразу во всех действиях, используя язык с направлением макета RTL. Ответ использует язык Farsi для RTL. Вы можете использовать английский, если хотите LTR.
Поместите следующий код в метод onCreate вашей активности запуска перед вызовом setContentView:
Configuration configuration = getResources().getConfiguration();
configuration.setLayoutDirection(new Locale("fa")); // Farsi for RTL
getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());
Старый ответ:
Вы можете получить ссылку на вид декора в каждом упражнении и задать направление его компоновки.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
}
Чтобы сделать этот процесс короче, поместите приведенный выше код в метод onCreate общего класса BaseActivity, который расширяет AppCompatActivity и использует все действия в качестве его подклассов.