Как избежать разделения строк на основе языка интерфейса - PullRequest
0 голосов
/ 16 октября 2018

Я столкнулся с проблемой, которая, кажется, связана с Android breakStrategy для TextView с.Я использую material-dialogs, чтобы показать сообщение (на датском) пользователю.В одном из диалогов одно из слов в некоторых случаях неверно разделяется.

Кажется, что оно зависит от языка интерфейса устройства.Если пользовательский интерфейс - датский, все хорошо, но если я перехожу на английский, он неверно разделяется.Тексты помещены в strings.xml и пока не будут переведены на другие языки.Это, однако, не является проблемой в соответствии с документацией :

Текстовые строки в res/values/strings.xml должны использовать язык по умолчанию, который вы ожидаете от большинства вашихГоворят пользователи приложения.

Вот как это выглядит, если пользовательский интерфейс устройства установлен на английский.Ожидается, что слово будет разбито как «adgangs-kode».English device UI splits

Вот как это выглядит с пользовательским интерфейсом устройства, установленным на датский, где «adgangskode» правильно разделен.Danish device UI splits

Я попытался установить tools:locale="da" в strings.xml без удачи.Я знаю, что могу установить breakStrategy, но было бы неприятно делать это везде, где я использую TextView, и потребовалось бы больше работы при использовании material-dialogs (так как мне понадобится пользовательский вид).

Так кто-нибудь знает, возможно ли установить breakStrategy глобально (без создания пользовательского вида) или если это возможносказать Android на каком языке локализованный текст?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Относительно вопроса о настройке breakStrategy во всем мире я нашел этот ответ , который использует его в стилях, подобных этому, в файле styles.xml:

<style name="Base.Widget.TextView" parent="android:Widget.TextView">
    <item name="android:breakStrategy">simple</item>
</style>

Этот Base.Widget.TextView теперь можно установить с помощью android:textViewStyle в вашей теме.Обратите внимание, что приведенный выше пример кода работает только для Android API 23+ (и поэтому должен быть не менее values-v23/styles.xml), но вы все равно можете установить Base.Widget.TextView в values/styles.xml.Использование textViewStyle также упоминается в этом сообщении в блоге .

0 голосов
/ 17 октября 2018

Вызовите метод после действия onCreate, вам нужно установить специальный язык, который вам действительно нужен. Мой пример - китайский.

private void changeLanguage(){

Resources resources = getResources();

DisplayMetrics dm = resources.getDisplayMetrics();

Configuration config = resources.getConfiguration();

Locale l;

l = config.locale;

if (l.getLanguage().equals(mCurrentCountry)) {

return;

}

if (l.getCountry().equalsIgnoreCase("TW")||l.getCountry().equalsIgnoreCase("HK")) {

mCurrentCountry = "CN";

config.locale = Locale.CHINA;

}

// Log.w(TAG,"check current font scale:"+dm);

// dm.scaledDensity = dm.density;

resources.updateConfiguration(config, dm);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...