Использование шрифта с EditText в виджете
Можно ли как-то использовать Typeface
определение шрифта, загруженное из активов с EditText
в виджете?
6 ответов:
Шрифт, который вы хотите использовать, должен находиться в каталоге assets/fonts, и вы получаете к нему доступ следующим образом:
Typeface myFont = Typeface.createFromAsset(getAssets(), "fonts/myfont.ttf"); edittext.setTypeface(myFont);
editText.setTypeface(Typeface.createFromAsset(context.getAssets(),"fonts/myfont.ttf"));
Предположим, что у вас есть такая структура файлов:
/ активы / шрифты / myfont.ttf
Пожалуйста, смотрите ниже код для этого, это решит вашу проблему.
// text view label TextView mTextView1 = (TextView) findViewById(R.id.TextView1); // Loading Font Face Typeface tf = Typeface.createFromAsset(getAssets(), "DroidSansFallback.ttf"); // Applying font mTextView1.setTypeface(tf);
И смотрите ссылку ниже для получения дополнительной информации.
Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/Comic.ttf"); youredittext.setTypeface(tf);
Я уже пробовал это сейчас. Это сработало для меня. Удачи
Другой лучшей формой для реализации этого и избежать добавления шрифта для всех textviews является extends A TextView (или EditText или ... ) и применить шрифт к методу setTypeface. С помощью этого метода вы можете управлять жирным шрифтом, курсивом и другими стилями.
Вот код для класса, который расширяет TextView и применяет шрифт Roboto. Кроме того, он контролирует некоторые ошибки, которые Android 4.0 имеет с html-кодами при установке Spannable из HTML
public class TextViewRoboto extends TextView { public static final String TAG = "TextViewRoboto"; public TextViewRoboto(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public TextViewRoboto(Context context, AttributeSet attrs) { super(context, attrs); } public TextViewRoboto(Context context) { super(context); } @Override public void setTypeface(Typeface tf, int style) { //This is to override eclipse error messages if (!super.isInEditMode()) { if (style == Typeface.BOLD) super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Bold.ttf")); else if (style == Typeface.ITALIC) super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Italic.ttf")); else super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Regular.ttf")); } } // // With this code aboid the <b> and <strong> problem on Jelly Bean // @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { try{ super.onMeasure(widthMeasureSpec, heightMeasureSpec); }catch (ArrayIndexOutOfBoundsException e){ //Logger.w(TAG, "Problem onMeasure. Set normal text"); setText(getText().toString()); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } @Override public void setGravity(int gravity){ try{ super.setGravity(gravity); }catch (ArrayIndexOutOfBoundsException e){ //Logger.w(TAG, "Problem setGravity. Set normal text"); setText(getText().toString()); super.setGravity(gravity); } } @Override public void setText(CharSequence text, BufferType type) { try{ super.setText(text, type); }catch (ArrayIndexOutOfBoundsException e){ //Logger.w(TAG, "Problem on setText. Set normal text"); setText(text.toString()); } } public void setHTMLText(CharSequence text, BufferType type) { String tmpText = text.toString(); if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) { tmpText = tmpText.replace("<strong>", "<b>"); tmpText = tmpText.replace("</strong>", "</b>"); tmpText = tmpText.replace("<em>", "<i>"); tmpText = tmpText.replace("</em>", "</i>"); text = tmpText; } try{ super.setText(Html.fromHtml(tmpText), type); }catch (ArrayIndexOutOfBoundsException e){ //Logger.w(TAG, "Problem on setText. Set normal text"); setText(text.toString()); } } }