Change font for EditText in Android?

前端 未结 8 936
梦谈多话
梦谈多话 2020-12-10 10:17

Is there any way to change the font for a EditText in Android? I want it to match the font\'s I set for all my textViews.

相关标签:
8条回答
  • 2020-12-10 10:51

    First Method

    use this code in your java class

        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
    

    Second Method

    1. Create a new java class and it as u want

      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. Use it in your Xml file

                    <YourPackageNAme.CustomEditText
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:background="@null"/>
      
    0 讨论(0)
  • 2020-12-10 10:54

    You can create font folder under res directory in last version Android studio 3 .Then copy and past it you'r font to font folder. Now just add fontFamily to EditText tag xml.

    like below.

            <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" />
    

    We use android:fontFamily="@font/ritaric" for apply font on EditText.

    0 讨论(0)
  • 2020-12-10 10:55

    Create a fonts folder on assets folder and put your .ttf font file, then into onCreate() function write:

    EditText editText =(EditText)findViewById(R.id.insert_yors_edit_text_layout);
    Typeface type = Typeface.createFromAsset(getAssets(),"fonts/yours_font.ttf"); 
    editText.setTypeface(type);
    
    0 讨论(0)
  • 2020-12-10 10:57

    Solution1:: Just call these method by passing parent view as argument.

    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) {
     }
    }
    

    Solution2:: you can subclass the TextView class with your custom font and use it instead of 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);
            }
        }
    
     }
    
    0 讨论(0)
  • 2020-12-10 10:57
    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 ));
                            }
                    }
            }
    

    In your Activity or Fragment , get the main layout

    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);
        }
    
    0 讨论(0)
  • 2020-12-10 10:57

    Add this code in your java file Which type you want you can add like NORMAL, ITALIC, BOLD, BOLD_ITALIC.

    edittext.setTypeface(null, Typeface.ITALIC);

    0 讨论(0)
提交回复
热议问题