Fontfamily не работает на Android Lollipop

Я хочу установить свет sans-serif как шрифт по умолчанию в моем приложении. Я работаю над устройством Android Lollipop. Итак, это мои styles.xml :

<resources> <style name="AppBaseTheme" parent="android:Theme.Material.Light.DarkActionBar"> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> <item name="android:textViewStyle">@style/RobotoTextViewStyle</item> <item name="android:buttonStyle">@style/RobotoButtonStyle</item> </style> <style name="RobotoTextViewStyle" parent="android:Widget.TextView"> <item name="android:fontFamily">sans-serif-light</item> </style> <style name="RobotoButtonStyle" parent="android:Widget.Button"> <item name="android:fontFamily">sans-serif-light</item> </style> </resources> 

Когда я запускаю приложение на своем устройстве, свет без засечек не применяется во всех представлениях. Например, TextViews в ActivityMain.java отображаются с нужным шрифтом, но в других действиях, таких как SecondActivity.java, все текстовые элементы отображаются нормально. Если я запускаю свое приложение на устройстве с Android 4.1, он работает во всех представлениях. Что я делаю не так? Заранее спасибо 🙂

Если использование темы Material Design не важно для вас, вы можете использовать это:

 <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:typeface">sans-serif-light</item> </style> 

Если использование темы материала важно для вашего приложения, вы можете использовать следующую технику:

 import java.lang.reflect.Field; import android.content.Context; import android.graphics.Typeface; public final class FontsOverride { public static void setDefaultFont(Context context, String staticTypefaceFieldName, String fontAssetName) { final Typeface regular = Typeface.createFromAsset(context.getAssets(), fontAssetName); replaceFont(staticTypefaceFieldName, regular); } protected static void replaceFont(String staticTypefaceFieldName, final Typeface newTypeface) { try { final Field staticField = Typeface.class .getDeclaredField(staticTypefaceFieldName); staticField.setAccessible(true); staticField.set(null, newTypeface); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } 

Теперь перегрузите шрифты по умолчанию в классе приложения

 public final class Application extends android.app.Application { @Override public void onCreate() { super.onCreate(); FontsOverride.setDefaultFont(this, "SANS_SERIF", "sans_serif_light.ttf"); } } 
Intereting Posts
Почему некоторые классы не являются общедоступными в Библиотеке поддержки Android? Как изменить цвет фона кнопки переключения на Android Android Intent.ACTION_SCREEN_OFF и Intent.ACTION_USER_PRESENT, как зарегистрировать его API графиков для Android Как найти версию приложений Google Play для Android Как скрыть / показать кнопку в виджетах главного экрана Android Как добавить собственный пользовательский IME в диалоговом окне «Выбор метода ввода» OData Consumer для Android – какой OData взять / рамки следует использовать? Вызов Apache DefaultHttpClient приводит к «java.lang.RuntimeException: Stub!» SetItemChecked не работает над ListFragment после вращения экрана Почему getWindow (). SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); Не работает в ландшафтном режиме? Strange RuntimeException при запуске приложения Android на некоторых устройствах R.java исчезает после очистки проекта Google Volley против Android-Async-Http Как определить источник Conscrypt, используемый в коде конфигурации сетевой безопасности Android N?