Как настроить пользовательские шрифты на EditText Android

Я пытаюсь реализовать набор настраиваемых шрифтов в редакторе Text, у кого есть лучший подход, а не это.

Typeface myFont = Typeface.createFromAsset(getAssets(), "fonts/myfont.ttf"); edittext.setTypeface(myFont); 

Потому что у меня много текста редактирования ….

 public class CEditText extends EditText { private Context context; private AttributeSet attrs; private int defStyle; public CEditText(Context context) { super(context); this.context=context; init(); } public CEditText(Context context, AttributeSet attrs) { super(context, attrs); this.context=context; this.attrs=attrs; init(); } public CEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.context=context; this.attrs=attrs; this.defStyle=defStyle; init(); } private void init() { Typeface font=Typeface.createFromAsset(getContext().getAssets(), "fonts/myfont.ttf"); this.setTypeface(font); } @Override public void setTypeface(Typeface tf, int style) { tf=Typeface.createFromAsset(getContext().getAssets(), "fonts/myfont.ttf"); super.setTypeface(tf, style); } @Override public void setTypeface(Typeface tf) { tf=Typeface.createFromAsset(getContext().getAssets(), "fonts/myfont.ttf"); super.setTypeface(tf); } 

Вызовите этот класс в XML следующим образом

 <yourpackagename.CEditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp"> </yourpackagename.CEditText> 

Создайте новый класс, который расширяет EditText как

 public class CustomEditTextNormal extends EditText { public CustomEditTextNormal(Context context) { super(context); init(context); } public CustomEditTextNormal(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public CustomEditTextNormal(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); } public void init(Context context) { try { Typeface myFont = Typeface.createFromAsset(context.getAssets(), "fonts/myfont.ttf"); setTypeface(mSearchAndSend.HelveticaLight); } catch (Exception e) { Logger.LogError(e); } } } 

И включить его в свой XML, как

 <com.package.name.CustomEditText/> 

Как создать новый класс, который наследует EditText и задает нужный шрифт, а затем создать новый класс в xml?

Создайте новый класс, который наследует от EditText , а затем переопределите метод public void setTypeface(Typeface tf, int style) и добавьте свой собственный шрифт.

Вам нужно сделать один метод в Common class Like,

 public void setExternalFonts(EdiText tv) { Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/myfont.ttf"); tv.setTypeface(tf); } 

Теперь вызовите этот метод как

 yourClassName.setExternalFonts(yourEditText); 

Создайте новый класс, который наследует от EditText, а затем переопределите метод void setTypeface (Typeface tf, int style) и добавьте свой собственный шрифт.

И используйте в своей деятельности, как этот FontLoader.setQuickSandTypeface (YourEditText) в вашей деятельности

Попробуй это

 public void overrideFonts(final Context context, final View v) { try { if (v instanceof ViewGroup) { ViewGroup vg = (ViewGroup) v; for (int i = 0; i < vg.getChildCount(); i++) { View child = vg.getChildAt(i); overrideFonts(context, child); } } else if (v instanceof EditText) { ((EditText) v).setTypeface(Typeface.createFromAsset(context.getAssets(), "roboto_thin.ttf")); } } catch (Exception e) { e.printStackTrace(); } } 

Попробуй это. Также полезно для кнопок, TextViews .. что угодно!

 <your.namespace.app.FontEditText app:font="montserrat" android:layout_width="wrap_content" android:layout_height="wrap_content"/> 

Кто возможен? По этому пути!

 public class FontEditText extends EditText { public FontEditText(Context context) { this( context, null ); } public FontEditText(Context context, AttributeSet attrs) { this( context, attrs, 0 ); init( context, attrs ); } public FontEditText(Context context, AttributeSet attrs, int defStyle) { super( context, attrs, defStyle ); init( context, attrs ); } public FontEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super( context, attrs, defStyleAttr, defStyleRes ); init( context, attrs ); } private void init(Context context, AttributeSet attrs) { TypedArray ta = context.obtainStyledAttributes( attrs, R.styleable.Fonts ); if ( ta != null ) { String fontAsset = ta.getString( R.styleable.Fonts_font ); if ( !StringUtils.isEmpty( fontAsset ) ) { int type = Integer.parseInt( fontAsset ); Typeface typeFace = FontManager.getInstance( context ).getByType( type ); ta.recycle(); super.setTypeface( typeFace ); } } } } public class FontManager { private static FontManager Instance; private Context context; private Typeface robotoCondensedBold; private Typeface robotoCondensed; private Typeface robotoLight; private Typeface kronica; private Typeface montserrat; private Typeface montserratLight; private Typeface keepCalmMedium; private FontManager(Context context) { this.context = context; this.robotoCondensedBold = Typeface.createFromAsset( context.getAssets(), "fonts/RobotoCondensed-Bold.ttf" ); this.robotoCondensed = Typeface.createFromAsset( context.getAssets(), "fonts/RobotoCondensed-Regular.ttf" ); this.robotoLight = Typeface.createFromAsset( context.getAssets(), "fonts/Roboto-Light.ttf" ); this.kronica = Typeface.createFromAsset( context.getAssets(), "fonts/kronika.ttf" ); this.montserrat = Typeface.createFromAsset( context.getAssets(), "fonts/Montserrat-Regular.ttf" ); this.montserratLight = Typeface.createFromAsset( context.getAssets(), "fonts/Montserrat-Light.ttf" ); this.keepCalmMedium = Typeface.createFromAsset( context.getAssets(), "fonts/KeepCalmMedium.ttf" ); } public synchronized static FontManager getInstance(Context context) { if ( Instance == null ) Instance = new FontManager( context ); return Instance; } public Typeface getByType(int type) { switch ( type ) { case 0: return FontManager.getInstance( context ).getRobotoCondensedBold(); case 1: return FontManager.getInstance( context ).getRobotoLight(); case 2: return FontManager.getInstance( context ).getKronica(); case 3: return FontManager.getInstance( context ).getRobotoCondensed(); case 4: return FontManager.getInstance( context ).getMontserrat(); case 5: return FontManager.getInstance( context ).getMontserratLight(); case 6: return FontManager.getInstance( context ).getKeepCalmMedium(); default: return Typeface.DEFAULT; } } public Typeface getRobotoCondensedBold() { return robotoCondensedBold; } public Typeface getKronica() { return kronica; } public Typeface getRobotoCondensed() { return robotoCondensed; } public Typeface getRobotoLight() { return robotoLight; } public Typeface getMontserrat() { return montserrat; } public Typeface getMontserratLight() { return montserratLight; } public Typeface getKeepCalmMedium() { return keepCalmMedium; } 

Кроме того, font_attrs.xml в папке res :

 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Fonts"> <attr name="font" format="enum"> <enum name="robotoCondensedBold" value="0"/> <enum name="robotoLight" value="1"/> <enum name="kronica" value="2"/> <enum name="robotoCondensed" value="3"/> <enum name="montserrat" value="4"/> <enum name="montserratLight" value="5"/> <enum name="keepCalmMedium" value="6"/> </attr> </declare-styleable> </resources> 

Обратите внимание, что вам нужно только изменить FontManager и font_attrs.xml чтобы настроить шрифты!

Intereting Posts
Использование Non-Production Activity для тестирования с Android Studio Как получить интерактивные гиперссылки в AlertDialog из строкового ресурса? Android facebook sdk v4.0 не работает Приложение для Android показывает, что «этот элемент несовместим с вашим устройством» Ошибка приложения после установки на Theme.NoTitleBar.Fullscreen Как захватить событие onclick в отключенном EditText в приложении для Android Запуск активности из строки состояния создает новую активность, даже если она уже существует Android Studio показывает ошибку при попытке использовать Embedded JDK вместо пользовательской установки Использование классов BufferedImage и ImageIO в моей Android-активности Не удается разрешить символ @ drawable / ic_launcher Коснитесь прокрутки на панели «Просмотр флипперов» в Android? Исключение NullPointer при попытке запустить устройство на студии Android Получить URI для фотографии RawContact в Android Удержание камеры возвращает небольшое изображение Android: Использование слабой ссылки на экземпляр активности / фрагмента вместо сильной ссылки?