29

有什么方法可以更改 Android 中 EditText 的字体吗?我希望它与我为所有 textViews 设置的字体相匹配。

4

8 回答 8

41
 editText.setTypeface(Typeface.SERIF); 

就像 TextView 一样。

 <TextView
  ...
     android:typeface="serif"
  ... />

编辑:上面是 XML

于 2012-05-26T14:09:22.223 回答
27

解决方案1:: 只需通过传递父视图作为参数来调用这些方法。

private 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) {
            ((TextView) v).setTypeface(Typeface.createFromAsset(context.getAssets(), "font.ttf"));
        }
    } catch (Exception e) {
 }
}

解决方案 2:: 您可以使用自定义字体对 TextView 类进行子类化,并使用它来代替 textview。

public class MyEditView extends EditText{

    public MyEditView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyEditView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyEditView(Context context) {
        super(context);
        init();
    }

    private void init() {
        if (!isInEditMode()) {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font.ttf");
            setTypeface(tf);
        }
    }

 }
于 2012-05-26T14:10:16.400 回答
10

在assets文件夹上创建一个fonts文件夹并放入您的 .ttf 字体文件,然后在 onCreate() 函数中写入:

EditText editText =(EditText)findViewById(R.id.insert_yors_edit_text_layout);
Typeface type = Typeface.createFromAsset(getAssets(),"fonts/yours_font.ttf"); 
editText.setTypeface(type);
于 2013-08-13T01:59:21.663 回答
7

您可以在最新版本的 Android Studio 3 中的 res 目录下创建字体文件夹。然后将您的字体复制并粘贴到字体文件夹中。现在只需添加fontFamilyEditText标记 xml。

如下所示。

        <EditText
            android:id="@+id/subject"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/headerShare"
            android:layout_marginBottom="5dp"
            android:layout_marginEnd="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:background="@drawable/edittext_bg"
            android:fontFamily="@font/ritaric"
            android:gravity="start"
            android:hint="Subject"
            android:inputType="text"
            android:maxHeight="50dp"
            android:padding="16dp"
            android:textColor="@color/black"
            android:textColorHint="@color/black"
            android:textSize="@dimen/colors_textview_size" />

我们android:fontFamily="@font/ritaric"用于在 EditText 上应用字体。

于 2017-12-01T08:26:56.600 回答
1
void setFont(Context context, ViewGroup vg)
        {
          final String FONT_NAME = "lato_bold.ttf";
            for (int i = 0; i < vg.getChildCount(); i++)
                {
                    View v = vg.getChildAt(i);
                    if (v instanceof ViewGroup)
                        setFont(context, (ViewGroup) v);
                    else if (v instanceof TextView)
                        {
                            ((TextView) v).setTypeface(Typeface.createFromAsset(context.getAssets(), FONT_NAME ));
                        }
                    else if (v instanceof EditText)
                        {
                            ((EditText) v).setTypeface(Typeface.createFromAsset(context.getAssets(), FONT_NAME ));
                        }
                    else if (v instanceof Button)
                        {
                            ((Button) v).setTypeface(Typeface.createFromAsset(context.getAssets(), FONT_NAME ));
                        }
                    else if (v instanceof CheckBox)
                        {
                            ((CheckBox) v).setTypeface(Typeface.createFromAsset(context.getAssets(), FONT_NAME ));
                        }
                    else if (v instanceof RadioButton)
                        {
                            ((RadioButton) v).setTypeface(Typeface.createFromAsset(context.getAssets(), FONT_NAME ));
                        }
                }
        }

在您的 Activity 或 Fragment 中,获取主布局

Inflater inflater = (Inflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//For Activity
//Inflater inflater = (Inflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.main_fragment, container, false);
//For Activity
//View v = inflater.inflate(R.layout.signup_fragment, null, false);
if (v instanceof ViewGroup)
    {
      setFont(getActivity(), (ViewGroup) v);
      //For Activity
     //setFont(this, (ViewGroup) v);
    }
于 2014-10-28T12:27:11.263 回答
0

第一种方法

在您的 java 类中使用此代码

    EditText et_brand=(EditText)findViewById(R.id.et_brand);
    et_brand.setTypeface(Typeface.createFromAsset(getAssets(),"Aspergit Bold.ttf")); 
    //Aspergit Bold.ttf is Font style name of text

第二种方法

  1. 创建一个新的 java 类,它是你想要的

    public class CustomTextView extends TextView {
    
    public CustomTextView(Context context, AttributeSet attrs, int defStyle) 
    {
    super(context, attrs, defStyle);
    init();
    }
    
    public CustomTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    init();
    }
    
    public CustomTextView(Context context) {
    super(context);
    init();
    }
    
    private void init() {
       Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
    "Aspergit Bold.ttf");
    setTypeface(tf);
    }
    }
    
  2. 在您的 XML 文件中使用它

                  <YourPackageNAme.CustomEditText
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:background="@null"/>
    
于 2017-03-28T11:58:31.823 回答
0

将此代码添加到您的 java 文件中 ,您可以添加哪种类型,例如 NORMAL、ITALIC、BOLD、BOLD_ITALIC。

edittext.setTypeface(null, Typeface.ITALIC);

于 2018-01-18T11:28:03.820 回答
0

迟到了,但是,简单的方法

 mEditTextMobileNumber.setTextSize(16.0f);

如果您想在输入时更改字体:

   // Change text size when started entering number
    mEditTextMobileNumber.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s == null || String.valueOf(s).equalsIgnoreCase("")) {
                mEditTextMobileNumber.setTextSize(12.0f);
            } else {
                mEditTextMobileNumber.setTextSize(20.0f);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
于 2019-10-24T10:47:18.127 回答