How to set custom font in .xml file instead of .java file?

前端 未结 8 471
無奈伤痛
無奈伤痛 2020-12-05 10:14

I am creating one Application in which I want to set custom font.

But I can\'t use custom Fonts in .xml file, for using this I need to initialize each and every Text

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

    For your reference,

     public class MyTextView extends TextView {
    
        public MyTextView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init();
        }
    
        public MyTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }
    
        public MyTextView(Context context) {
            super(context);
            init();
        }
    
        public void init() {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/yourfont.ttf");
            setTypeface(tf ,1);
    
        }
    }
    

    In XML,

     <you_package.MyTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"       
            android:textSize="20sp"
            android:text="Your text"
            />
    
    0 讨论(0)
  • 2020-12-05 10:28

    As per the documentation

    Android 8.0 (API level 26) introduces a new feature, Fonts in XML, which lets you use fonts as resources. You can add the font file in the res/font/ folder to bundle fonts as resources. These fonts are compiled in your R file and are automatically available in Android Studio. You can access the font resources with the help of a new resource type, font. For example, to access a font resource, use @font/myfont, or R.font.myfont. To use the Fonts in XML feature on devices running Android API version 14 and higher, use the Support Library 26.

    To add fonts as resources, perform the following steps in the Android Studio:

    1.Right-click the res folder and go to New > Android resource directory. The New Resource Directory window appears.

    2.In the Resource type list, select font, and then click OK. Note: The name of the resource directory must be font.

    3.Add your font files in the font folder.

    Creating a font family

    A font family is a set of font files along with its style and weight details. In Android, you can create a new font family as an XML resource and access it as a single unit, instead of referencing each style and weight as separate resources. By doing this, the system can select the correct font based on the text style you are trying to use.

    To create a font family, perform the following steps in the Android Studio:

    1.Right-click the font folder and go to New > Font resource file. The New Resource File window appears.

    2.Enter the file name, and then click OK. The new font resource XML opens in the editor.

    3.Enclose each font file, style, and weight attribute in the element. The following XML illustrates adding font-related attributes in the font resource XML:

    <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:android="http://schemas.android.com/apk/res/android">
        <font
            android:fontStyle="normal"
            android:fontWeight="400"
            android:font="@font/lobster_regular" />
        <font
            android:fontStyle="italic"
            android:fontWeight="400"
            android:font="@font/lobster_italic" />
    </font-family>
    

    Using fonts in XML layouts

    In the layout XML file, set the fontFamily attribute to the font file you want to access.

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/lobster"/>
    

    Open the Properties window to set the font for the TextView. Select a view to open the Properties window. Note: The Properties window is available only when the design editor is open. Select the Design tab at the bottom of the window.

    Expand the textAppearance property, and then select the font from the fontFamily list.

    Adding fonts to style

    Open the styles.xml, and set the fontFamily attribute to the font file you want to access.

     <style name="customfontstyle" parent="@android:style/TextAppearance.Small">
        <item name="android:fontFamily">@font/lobster</item>
    </style>
    
    0 讨论(0)
  • 2020-12-05 10:31

    Android API 16+

    Beginning with Android 8.0 (API 26), there is native support for setting the fonts in XML. However, using the support library extends this down to Android 4.1 (API 16).

    enter image description here

    1. Add a font to your project

    • Right click the res folder and go to New > Android Resource Directory. Type font as the name and font as the Resource type.
    • Copy and paste your font into the new res/font directory. I'm just using a single font in my example, the regular dancing script font. I renamed it to dancing_script.ttf just to avoid any potential naming problems with upper case or illegal characters.

    2. Create a font-family XML file.

    • Right click the res/font folder and choose New > Font Resource File. Call it whatever you want. I'm calling mine my_custom_font.xml.
    • Paste in the following code. Note that the attributes are set twice, once for android (API 26+) and once for app (API 16+).

      <?xml version="1.0" encoding="utf-8"?>
      <font-family xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto">
          <font
              android:fontStyle="normal"
              android:fontWeight="400"
              android:font="@font/dancing_script"
              app:fontStyle="normal"
              app:fontWeight="400"
              app:font="@font/dancing_script"
              />
      </font-family>
      

    3. Set the font in XML

    Now you can just use the fontFamily attribute to set the font in XML.

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:fontFamily="@font/my_custom_font" />
    

    Notes

    • Read the documentation for more help.
    • If you need to support pre-API 16, then just set the font programmatically.
    0 讨论(0)
  • 2020-12-05 10:31

    Android 8.0 (API level 26) and Android Support Library 26 introduce support for APIs to request fonts from a provider application instead of bundling files into the APK or letting the APK download fonts. The feature is available on devices running Android API versions 14 and higher through the Support Library 26.

    Please Follow this link https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts

    0 讨论(0)
  • 2020-12-05 10:38

    As other answers suggest, you may use a font downloaded from google: Android Api 16+

    open the textAppearance spinner in the designer: Choose a font for your View (Tap More Fonts...) like so:


    In the dialog choose your custom font and download it to your project:

    Now, you can refer to this font from xml using the fontFamily attribute:

        <Button
        android:id="@+id/btnTapMe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/rounded_button"
        android:fontFamily="@font/aclonica"
    
        android:text="Tap Me!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    

    As a bonus, you can also use it from code: see snippet:

    Toast toast = Toast.makeText(this, yourString, Toast.LENGTH_SHORT);
    LinearLayout layout = (LinearLayout) toast.getView();
    TextView tvToast = (TextView) layout.getChildAt(0);
    
    //Here is the relevant part:
    Typeface typeface = ResourcesCompat.getFont(this, R.font.aclonica);
    tvToast.setTypeface(typeface);
    toast.show();
    
    0 讨论(0)
  • 2020-12-05 10:38

    You can simply use custom Text view like

    public class HelveticaRagularTextView extends TextView {
    
    public HelveticaRagularTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(attrs);
    }
    
    public HelveticaRagularTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(attrs);
    
    }
    
    public HelveticaRagularTextView(Context context) {
        super(context);
        init(null);
    }
    
    private void init(AttributeSet attrs) {
        // Just Change your font name
        Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), getContext().getResources().getString(R.string.font_helvetica_regular));
        setTypeface(myTypeface);
    }
    

    }

    Now you can HelveticaRagularTextView in your xml.

    This is very easy to use

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