Страницы

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

четверг, 23 мая 2019 г.

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

Проблема следующая. На одних устройствах язык (Телугу) отображается (планшет 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-моделях, хотелось бы разобраться в причинах. В какую сторону глядеть, на что обратить внимание, что еще добавить к вопросу для ясности?
Интересно,можно ли программно определить, что шрифт не отображается, но длину/размер строки в представлении имеет?


Ответ

Вероятно, стандартный шрифт Алкателей не содержит нужных символов. Попробуйте включить в ваше приложение шрифт, который точно будет работать, и устанавливать его для отдельных представлений
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)); } }

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

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