Страницы

Поиск по вопросам

суббота, 7 марта 2020 г.

Не отображается язык

#java #android #локализация #локаль


Проблема следующая. На одних устройствах язык (Телугу) отображается (планшет Prestigio,
samsung 6,  в том числе на эмуляторах Genymotion), на другом устройстве нет (Alcatel
One Touch, android 4.2.2). Причем в последнем устройстве длина невидимого текста определяется,
текст место занимает, в лог (Android Studio) выводится. 

Вывожу поддерживаемые устройством языки следующим образом - 

for (Locale locale : Locale.getAvailableLocales()) {
        Log.i("LOCALE", locale.getLanguage() + "_" + locale.getCountry() + " [" +
locale.getDisplayName() + "]");
    }


Отстуствие языка "te" (Telugu) в этом списке не мешает отображению на экране, кроме
Alcatel.

Как я понимаю проблема может всплыть не только в Alcatel-моделях, хотелось бы разобраться
в причинах. В какую сторону глядеть, на что обратить внимание, что еще добавить к вопросу
для ясности?

Интересно,можно ли программно определить, что шрифт не отображается, но длину/размер
строки в представлении имеет?
    


Ответы

Ответ 1



Вероятно, стандартный шрифт Алкателей не содержит нужных символов. Попробуйте включить в ваше приложение шрифт, который точно будет работать, и устанавливать его для отдельных представлений someTextView.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/myfont.ttf")); или для всего макета public class FontChangeCrawler { private Typeface typeface; public FontChangeCrawler(Typeface typeface) { this.typeface = typeface; } public FontChangeCrawler(AssetManager assets, String assetsFontFileName) { typeface = Typeface.createFromAsset(assets, assetsFontFileName); } public void replaceFonts(ViewGroup viewTree) { View child; for (int i = 0; i < viewTree.getChildCount(); ++i) { child = viewTree.getChildAt(i); if (child instanceof ViewGroup) { replaceFonts((ViewGroup)child); } else if (child instanceof TextView) { ((TextView) child).setTypeface(typeface); } } } } public class MainActivity extends AppCompatActivity { @Override public void setContentView(View view) { super.setContentView(view); FontChangeCrawler fontChanger = new FontChangeCrawler(getAssets(), "fonts/myfont.otf"); fontChanger.replaceFonts((ViewGroup)this.findViewById(android.R.id.content)); } }

Комментариев нет:

Отправить комментарий