Проблема следующая. На одних устройствах язык (Телугу) отображается (планшет 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));
}
}
Комментариев нет:
Отправить комментарий