Android - Sử dụng phông chữ tùy chỉnh


266

Tôi đã áp dụng một phông chữ tùy chỉnh cho một TextView, nhưng nó dường như không thay đổi kiểu chữ.

Đây là mã của tôi:

    Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
    TextView myTextView = (TextView)findViewById(R.id.myTextView);
    myTextView.setTypeface(myTypeface);

Bất cứ ai có thể xin vui lòng cho tôi ra khỏi vấn đề này?


1
Có lỗi trong cú pháp của bạn, nên làmyTextView.setTypeface(myTypeface);
yuttadhammo

Chủ đề này tương tự như: stackoverflow.com/a/14558090/693752
Snicolas



Tại đây, bạn có một cách hiệu quả để thay đổi phông chữ cho toàn bộ ứng dụng: stackoverflow.com/questions/18847531/ mẹo
Diego Palomar

Câu trả lời:


230

Trên MobXLuts + có hướng dẫn rất tốt về định dạng văn bản cho Android. Mẹo nhanh: Tùy chỉnh phông chữ Android

EDIT: Đã thử nó ngay bây giờ. Đây là giải pháp. Bạn có thể sử dụng một thư mục con được gọi là phông chữ nhưng nó phải đi trong assetsthư mục chứ không phải resthư mục. Vì thế

tài sản / phông chữ

Cũng đảm bảo rằng phông chữ kết thúc tôi có nghĩa là kết thúc của chính tệp phông chữ là tất cả chữ thường. Nói cách khác, không nên myFont.TTFnhưng myfont.ttf cách này phải viết thường


Chỉnh sửa phản ứng của tôi với giải pháp bây giờ.
Octavian A. Damiean

Bạn có thể vui lòng gửi cho tôi một số dự án demo làm việc? Tôi đã thử cả trong thư mục tài sản / phông chữ / xyz.ttf và tài sản / xyz.ttf nhưng nó không có phông chữ đó. Nó chỉ hiển thị phông chữ mặc định ..
RATTLESNAKE

2
Chắc chắn đây là liên kết đến dự án nén. dl.dropbox.com/u/8288893/customFont.zip
Octavian A. Damiean

5
Nếu bạn đang làm theo hướng dẫn đó, hãy đảm bảo bạn sử dụng đường dẫn typeface.createFromAsset (getAssets (), "Font / yourfont.ttf"); nếu bạn đã đặt nó trong thư mục con phông chữ
Jameo

không bao gồm "tài sản /" trong tên tệp (vì createFromAssethàm trực tiếp trỏ vào assetsthư mục)
topher

55

Sau khi thử hầu hết các giải pháp được mô tả trong chủ đề này, tôi vô tình tìm thấy Thư pháp ( https://github.com/chrisjenx/Call Thư ) - một thư viện của Christopher Jenkins cho phép bạn dễ dàng thêm phông chữ tùy chỉnh vào ứng dụng của mình. Những lợi thế của lib so với các phương pháp được đề xuất ở đây là:

  1. bạn không phải giới thiệu thành phần TextView được ghi đè của riêng mình, bạn sử dụng TextView tích hợp
  2. bạn có thể dễ dàng bao gồm thư viện bằng cách sử dụng gradle
  3. Thư viện không giới hạn sự lựa chọn phông chữ của bạn; bạn chỉ cần thêm những cái ưa thích của bạn vào thư mục tài sản
  4. bạn không chỉ có được chế độ xem văn bản tùy chỉnh - tất cả các thành phần Android dựa trên văn bản khác cũng sẽ được hiển thị bằng phông chữ tùy chỉnh của bạn.

1
những gì là kích thước của thư viện đó là một câu hỏi quan trọng, bởi vì đó là của sẽ ảnh hưởng đến kích thước của ứng dụng.
eRaisedToX

32

Tôi biết đã có câu trả lời tốt, nhưng đây là một triển khai hoạt động đầy đủ.

Đây là chế độ xem văn bản tùy chỉnh:

package com.mycompany.myapp.widget;

/**
 * Text view with a custom font.
 * <p/>
 * In the XML, use something like {@code customAttrs:customFont="roboto-thin"}. The list of fonts
 * that are currently supported are defined in the enum {@link CustomFont}. Remember to also add
 * {@code xmlns:customAttrs="http://schemas.android.com/apk/res-auto"} in the header.
 */
public class CustomFontTextView extends TextView {

    private static final String sScheme =
            "http://schemas.android.com/apk/res-auto";
    private static final String sAttribute = "customFont";

    static enum CustomFont {
        ROBOTO_THIN("fonts/Roboto-Thin.ttf"),
        ROBOTO_LIGHT("fonts/Roboto-Light.ttf");

        private final String fileName;

        CustomFont(String fileName) {
            this.fileName = fileName;
        }

        static CustomFont fromString(String fontName) {
            return CustomFont.valueOf(fontName.toUpperCase(Locale.US));
        }

        public Typeface asTypeface(Context context) {
            return Typeface.createFromAsset(context.getAssets(), fileName);
        }
    }

    public CustomFontTextView(Context context, AttributeSet attrs) {
        super(context, attrs);

        if (isInEditMode()) {
            return;
        } else {
            final String fontName = attrs.getAttributeValue(sScheme, sAttribute);

            if (fontName == null) {
                throw new IllegalArgumentException("You must provide \"" + sAttribute + "\" for your text view");
            } else {
                final Typeface customTypeface = CustomFont.fromString(fontName).asTypeface(context);
                setTypeface(customTypeface);
            }
        }
    }
}

Đây là thuộc tính tùy chỉnh. Điều này sẽ đi đến res/attrs.xmltập tin của bạn :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CustomFontTextView">
        <attr name="customFont" format="string"/>
    </declare-styleable>
</resources>

Và đây là cách bạn sử dụng nó. Tôi sẽ sử dụng một bố cục tương đối để bọc nó và hiển thị customAttrkhai báo, nhưng rõ ràng nó có thể là bất kỳ bố cục nào bạn đã có.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:customAttrs="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.mycompany.myapp.widget.CustomFontTextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="foobar"
         customAttrs:customFont="roboto_thin" />

</RelativeLayout>

Điều gì customAttrsđề cập đến trong dự án của tôi?
Skynet

@Skynet nó đề cập đến không gian tên được xác định trong chế độ xem gốc của bạn xmlns:customAttrs="http://schemas.android.com/apk/res-auto". Điều này tự động được đặt các thuộc tính cho chế độ xem tùy chỉnh. Trong trường hợp này, bạn có một thuộc tính được gọi là customFont được định nghĩa trong attrs.xml Một cách dễ hiểu hơn là xem xét xmlns:android="http://schemas.android.com/apk/res/android"định nghĩa không gian tên cho các thuộc tính Android của bạn. Vì vậy, nếu bạn thay đổi điều ađó thành thay vì android:textnó sẽ được a:text.
CodyEngel 19/03/2016

14

Tôi đã sử dụng thành công này trước đây. Sự khác biệt duy nhất giữa các triển khai của chúng tôi là tôi đã không sử dụng thư mục con trong tài sản. Không chắc chắn nếu điều đó sẽ thay đổi bất cứ điều gì, mặc dù.


13

Với điều kiện bạn đã đặt phông chữ đúng chỗ và không có lỗi trong chính tệp phông chữ, mã của bạn sẽ hoạt động như vậy, RATTLESNAKE.

Tuy nhiên, sẽ dễ dàng hơn rất nhiều nếu bạn chỉ cần xác định một phông chữ trong bố cục xml của mình, như thế này:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <!-- This text view is styled with the app theme -->
    <com.innovattic.font.FontTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This uses my font in bold italic style" />

    <!-- This text view is styled here and overrides the app theme -->
    <com.innovattic.font.FontTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:flFont="anotherFont"
        android:textStyle="normal"
        android:text="This uses another font in normal style" />

    <!-- This text view is styled with a style and overrides the app theme -->
    <com.innovattic.font.FontTextView
        style="@style/StylishFont"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This also uses another font in normal style" />

</LinearLayout>

Có kèm theo res/values/styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">

    <!-- Application theme -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
        <item name="android:textViewStyle">@style/MyTextViewStyle</item>
    </style>

    <!-- Style to use for ALL text views (including FontTextView) -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="MyTextViewStyle" parent="@android:style/Widget.Holo.Light.TextView">
        <item name="android:textAppearance">@style/MyTextAppearance</item>
    </style>

    <!-- Text appearance to use for ALL text views (including FontTextView) -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="MyTextAppearance" parent="@android:style/TextAppearance.Holo">
        <!-- Alternatively, reference this font with the name "aspergit" -->
        <!-- Note that only our own TextView's will use the font attribute -->
        <item name="flFont">someFont</item>
        <item name="android:textStyle">bold|italic</item>
    </style>

    <!-- Alternative style, maybe for some other widget -->
    <style name="StylishFont">
        <item name="flFont">anotherFont</item>
        <item name="android:textStyle">normal</item>
    </style>

</resources>

Tôi đã tạo ra một vài công cụ dành riêng cho mục đích này. Tham khảo dự án này từ GitHub, hoặc xem bài đăng trên blog này giải thích toàn bộ.


13

Cách tốt nhất để làm điều đó Từ bản phát hành xem trước Android O là cách này:

Nó chỉ hoạt động nếu bạn có android studio-2.4 trở lên

  1. Nhấp chuột phải vào thư mục res và chuyển đến New> thư mục tài nguyên Android .
    Cửa sổ Thư mục tài nguyên mới xuất hiện.
  2. Trong danh sách Kiểu tài nguyên, chọn phông chữ , rồi bấm OK.
  3. Thêm các tập tin phông chữ của bạn trong font thư mục .Công thư mục cấu trúc dưới đây tạo ra R.font.dancing_script, R.font.la_laR.font.ba_ba.
  4. Bấm đúp vào tệp phông chữ để xem trước phông chữ của tệp trong trình chỉnh sửa.

Tiếp theo chúng ta phải tạo một họ phông chữ:

  1. Nhấp chuột phải vào thư mục phông chữ và đi đến Mới> Tệp tài nguyên phông chữ . Cửa sổ Tệp tài nguyên mới xuất hiện.
  2. Nhập tên tệp, sau đó bấm OK . XML tài nguyên phông chữ mới mở trong trình soạn thảo.
  3. Đính kèm từng tệp phông chữ, kiểu và thuộc tính trọng lượng trong thành phần thẻ phông. XML sau minh họa thêm các thuộc tính liên quan đến phông chữ trong tài nguyên phông chữ XML:

Thêm phông chữ vào TextView:

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

Từ tài liệu

Làm việc với phông chữ

Tất cả các bước là chính xác.


4
ony api> 26 ((
maXp


Đây là một bước khá lớn # 3 ... Làm thế nào để bạn làm điều đó?
Mã Wiget

12

Đối với Phông chữ tùy chỉnh trong Android, hãy tạo một thư mục trong thư mục tài sản, tên "phông chữ" đặt tệp phông chữ.ttf hoặc .otf mong muốn của bạn vào đó.

Nếu bạn mở rộng UIBaseFragment:

Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Arial.ttf");
        tv.setTypeface(font);

khác nếu mở rộng Hoạt động:

Typeface font = Typeface.createFromAsset(getContext().getAssets(), "fonts/Arial.ttf");
        tv.setTypeface(font);

7

Bạn có thể sử dụng PixlUI tại https://github.com/neopixl/PixlUI

nhập .jar của họ và sử dụng nó trong XML

 <com.neopixl.pixlui.components.textview.TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world"
    pixlui:typeface="GearedSlab.ttf" />

4

Vì tôi không hài lòng với tất cả các giải pháp được trình bày về SO, tôi đã đưa ra giải pháp của tôi. Nó dựa trên một mẹo nhỏ với các thẻ (tức là bạn không thể sử dụng các thẻ trong mã của mình), tôi đặt đường dẫn phông chữ ở đó. Vì vậy, khi xác định chế độ xem, bạn có thể thực hiện việc này:

<TextView
        android:id="@+id/textViewHello1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World 1"
        android:tag="fonts/Oswald-Regular.ttf"/>

hoặc này:

<TextView
        android:id="@+id/textViewHello2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World 2"
        style="@style/OswaldTextAppearance"/>

<style name="OswaldTextAppearance">
        <item name="android:tag">fonts/Oswald-Regular.ttf</item>
        <item name="android:textColor">#000000</item>
</style>

Bây giờ bạn có thể truy cập / thiết lập chế độ xem một cách rõ ràng như sau:

TextView textView = TextViewHelper.setupTextView(this, R.id.textViewHello1).setText("blah");

hoặc chỉ thiết lập mọi thứ thông qua:

TextViewHelper.setupTextViews(this, (ViewGroup) findViewById(R.id.parentLayout)); // parentLayout is the root view group (relative layout in my case)

Và lớp học ma thuật bạn yêu cầu là gì? Chủ yếu được dán từ các bài viết SO khác, với các phương thức trợ giúp cho cả hoạt động và các đoạn:

import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.HashMap;
import java.util.Map;

public class TextViewHelper {
    private static final Map<String, Typeface> mFontCache = new HashMap<>();

    private static Typeface getTypeface(Context context, String fontPath) {
        Typeface typeface;
        if (mFontCache.containsKey(fontPath)) {
            typeface = mFontCache.get(fontPath);
        } else {
            typeface = Typeface.createFromAsset(context.getAssets(), fontPath);
            mFontCache.put(fontPath, typeface);
        }
        return typeface;
    }

    public static void setupTextViews(Context context, ViewGroup parent) {
        for (int i = parent.getChildCount() - 1; i >= 0; i--) {
            final View child = parent.getChildAt(i);
            if (child instanceof ViewGroup) {
                setupTextViews(context, (ViewGroup) child);
            } else {
                if (child != null) {
                    TextViewHelper.setupTextView(context, child);
                }
            }
        }
    }

    public static void setupTextView(Context context, View view) {
        if (view instanceof TextView) {
            if (view.getTag() != null) // also inherited from TextView's style
            {
                TextView textView = (TextView) view;
                String fontPath = (String) textView.getTag();
                Typeface typeface = getTypeface(context, fontPath);
                if (typeface != null) {
                    textView.setTypeface(typeface);
                }
            }
        }
    }

    public static TextView setupTextView(View rootView, int id) {
        TextView textView = (TextView) rootView.findViewById(id);
        setupTextView(rootView.getContext().getApplicationContext(), textView);
        return textView;
    }

    public static TextView setupTextView(Activity activity, int id) {
        TextView textView = (TextView) activity.findViewById(id);
        setupTextView(activity.getApplicationContext(), textView);
        return textView;
    }
}

4

Thật không may, không có giải pháp tốt cho việc này.

Tôi đã xem nhiều bài viết về việc sử dụng TextView tùy chỉnh nhưng họ quên mất rằng đó không chỉ là các bản xem văn bản có thể thực hiện phông chữ và có các bản xem xét bị ẩn trong các chế độ xem khác mà nhà phát triển không thể truy cập được; Tôi thậm chí sẽ không bắt đầu trên Spannable .

Bạn có thể sử dụng một tiện ích phông chữ bên ngoài như:

Công cụ chữ thư pháp

NHƯNG Vòng lặp này trên mọi chế độ xem trong ứng dụng khi tạo và thậm chí tiện ích này bỏ lỡ một số chế độ xem (ViewPager hiển thị phông chữ bình thường) thì bạn gặp vấn đề là khi Google cập nhật các công cụ xây dựng của họ, điều này đôi khi sẽ bị sập vì nó nhắm mục tiêu các thuộc tính không dùng nữa. Nó cũng chậm một chút vì nó sử dụng Reflection của Java .

Google thực sự phải sửa lỗi này. Chúng tôi cần hỗ trợ phông chữ tốt hơn trong Android. Nếu bạn nhìn vào giải pháp từ iOS, họ thực sự có 100 phông chữ được tích hợp để chọn. Bạn muốn một phông chữ tùy chỉnh? Chỉ cần thả TFF vào và nó có thể sử dụng được ..

Cho đến bây giờ chỉ giới hạn ở việc cung cấp mà Google cung cấp cho chúng tôi cực kỳ hạn chế nhưng may mắn thay, di động được tối ưu hóa.


2

Đảm bảo dán mã ở trên vào onCreate () sau cuộc gọi của bạn tới siêu và cuộc gọi đến setContentView (). Chi tiết nhỏ này khiến tôi gác máy một lúc.


2

Với Android 8.0, việc sử dụng Phông chữ tùy chỉnh trong Ứng dụng trở nên dễ dàng với downloadable fonts. Chúng tôi có thể thêm phông chữ trực tiếp vào res/font/ folderthư mục dự án và khi làm như vậy, phông chữ sẽ tự động có sẵn trong Android Studio.

Thư mục Dưới độ phân giải với phông chữ tên và loại được đặt thành Phông chữ

Bây giờ đặt fontFamilythuộc tính thành danh sách các phông chữ hoặc nhấp vào nhiều hơn và chọn phông chữ bạn chọn. Điều này sẽ thêm tools:fontFamily="@font/your_font_file"dòng vào TextView của bạn.

Điều này sẽ tự động tạo ra một vài tập tin.

1. Trong thư mục giá trị, nó sẽ tạofonts_certs.xml .

2. Trong Manifest, nó sẽ thêm dòng này:

  <meta-data
            android:name="preloaded_fonts"
            android:resource="@array/preloaded_fonts" /> 

3. preloaded_fonts.xml

<resources>
    <array name="preloaded_fonts" translatable="false">
        <item>@font/open_sans_regular</item>
        <item>@font/open_sans_semibold</item>
    </array>
</resources>

2

Bạn có thể sử dụng thư viện bên thứ ba EasyFonts dễ dàng & đơn giản để đặt nhiều phông chữ tùy chỉnh cho bạn TextView. Bằng cách sử dụng thư viện này, bạn không phải lo lắng về việc tải xuống và thêm phông chữ vào thư mục tài sản / phông chữ. Cũng về việc tạo đối tượng Kiểu chữ.

Thay vì

Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(myTypeface);

Đơn giản:

TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(EasyFonts.robotoThin(this));

Thư viện này cũng cung cấp khuôn mặt phông chữ sau đây.

  • Roboto
  • Droid Serif
  • Robot Droid
  • Sự tự do
  • Nho vui
  • Quốc gia Android
  • Bơ xanh
  • Sự công nhận

1

Tôi đã có cùng một vấn đề, TTF đã không xuất hiện. Tôi đã thay đổi tập tin phông chữ và với cùng một mã, nó hoạt động.


1

Nếu bạn muốn tải phông chữ từ mạng hoặc dễ dàng tạo kiểu cho nó, bạn có thể sử dụng:

https://github.com/shellum/fontView

Thí dụ:

<!--Layout-->
<com.finalhack.fontview.FontView
        android:id="@+id/someFontIcon"
        android:layout_width="80dp"
        android:layout_height="80dp" />

//Java:
fontView.setupFont("http://blah.com/myfont.ttf", true, character, FontView.ImageType.CIRCLE);
fontView.addForegroundColor(Color.RED);
fontView.addBackgroundColor(Color.WHITE);

1

Chà, sau bảy năm, bạn có thể thay đổi toàn bộ ứng dụng textViewhoặc những gì bạn muốn một cách dễ dàng bằng cách sử dụng android.supportcác thư viện 26 ++.

Ví dụ:

Tạo gói phông chữ của ứng dụng / src / res / font và di chuyển phông chữ của bạn vào đó.

nhập mô tả hình ảnh ở đây

Và trong chủ đề ứng dụng của bạn, chỉ cần thêm nó dưới dạng phông chữ:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   . . . ...
    <item name="android:fontFamily">@font/demo</item>
</style>

Ví dụ chỉ sử dụng với textView:

<style name="fontTextView" parent="@android:style/Widget.TextView">
    <item name="android:fontFamily">monospace</item>
</style>

Và thêm vào chủ đề chính của bạn:

<item name="android:textViewStyle">@style/fontTextView</item>

Hiện tại nó hoạt động trên 8.1 cho đến 4.1 API Jelly Bean Và đó là một phạm vi rộng.


1

Cập nhật câu trả lời: Android 8.0 (API cấp 26) giới thiệu một tính năng mới, Phông chữ trong XML. chỉ cần sử dụng tính năng Phông chữ trong XML trên các thiết bị chạy Android 4.1 (API cấp 16) trở lên, sử dụng Thư viện hỗ trợ 26.

xem liên kết này


Câu trả lời cũ

Có hai cách để tùy chỉnh phông chữ:

!!! phông chữ tùy chỉnh của tôi trong nội dung / phông chữ / iran_sans.ttf



Cách 1: Kiểu chữ chuyển hướng. Lớp | || cách tốt nhất

gọi FontsOverride.setDefaultFont () trong lớp mở rộng Ứng dụng, Mã này sẽ khiến tất cả các phông chữ phần mềm bị thay đổi, thậm chí là phông chữ Toasts

AppControll.java

public class AppController extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        //Initial Font
        FontsOverride.setDefaultFont(getApplicationContext(), "MONOSPACE", "fonts/iran_sans.ttf");

    }
}

Phông chữOverride.java

public class FontsOverride {

    public static void setDefaultFont(Context context, String staticTypefaceFieldName, String fontAssetName) {
        final Typeface regular = Typeface.createFromAsset(context.getAssets(), fontAssetName);
        replaceFont(staticTypefaceFieldName, regular);
    }

    private static void replaceFont(String staticTypefaceFieldName, final Typeface newTypeface) {
        try {
            final Field staticField = Typeface.class.getDeclaredField(staticTypefaceFieldName);
            staticField.setAccessible(true);
            staticField.set(null, newTypeface);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}



Cách 2: sử dụng setTypeface

để xem đặc biệt, chỉ cần gọi setTypeface () để thay đổi phông chữ.

CTextView.java

public class CTextView extends TextView {

    public CTextView(Context context) {
        super(context);
        init(context,null);
    }

    public CTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context,attrs);
    }

    public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context,attrs);
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context,attrs);
    }

    public void init(Context context, @Nullable AttributeSet attrs) {

        if (isInEditMode())
            return;

        // use setTypeface for change font this view
        setTypeface(FontUtils.getTypeface("fonts/iran_sans.ttf"));

    }
}

FontUtils.java

public class FontUtils {

    private static Hashtable<String, Typeface> fontCache = new Hashtable<>();

    public static Typeface getTypeface(String fontName) {
        Typeface tf = fontCache.get(fontName);
        if (tf == null) {
            try {
                tf = Typeface.createFromAsset(AppController.getInstance().getApplicationContext().getAssets(), fontName);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
            fontCache.put(fontName, tf);
        }
        return tf;
    }

}



0
  • Mở dự án của bạn và chọn Project ở phía trên bên trái
  • ứng dụng -> src -> chính
  • nhấp chuột phải vào chính và tạo tên thư mục như tài sản
  • nhấp chuột phải để xác nhận và tạo tên thư mục mới phông chữ
  • bạn cần tìm phông chữ miễn phí như phông chữ miễn phí
  • đưa nó cho Textview của bạn và gọi nó trong lớp Activity của bạn
  • sao chép phông chữ của bạn trong thư mục phông chữ
  • TextView txt = (TextView) findViewById(R.id.txt_act_spalsh_welcome); Typeface font = Typeface.createFromAsset(getAssets(), "fonts/Aramis Italic.ttf"); txt.setTypeface(font);

Tên của phông chữ phải chính xác và vui vẻ


0

Có, phông chữ có thể tải xuống rất dễ dàng, như Dipali s nói.

Đây là cách bạn làm điều đó...

  1. Đặt một TextView .
  2. Trong khung thuộc tính, chọn fontFamilythả xuống. Nếu nó không ở đó, hãy tìm caret thingy (> và nhấp vào nó để mở rộngtextAppearance ) bên dưới.
  3. Mở rộng font-family thả xuống.
  4. Trong danh sách nhỏ, cuộn xuống cho đến khi bạn thấy more fonts
  5. Điều này sẽ mở ra một hộp thoại nơi bạn có thể tìm kiếm từ Google Fonts
  6. Tìm kiếm phông chữ bạn thích với thanh tìm kiếm ở trên cùng
  7. Chọn phông chữ của bạn.
  8. Chọn kiểu phông chữ bạn thích (nghĩa là đậm, bình thường, in nghiêng, v.v.)
  9. Trong khung bên phải, chọn nút radio cho biết Add font to project
  10. Nhấp vào được. Bây giờ TextView của bạn có phông chữ bạn thích!

THƯỞNG: Nếu bạn muốn tạo kiểu MỌI THỨ với văn bản trong ứng dụng của mình với phông chữ đã chọn, chỉ cần thêm <item name="android:fontfamily">@font/fontnamehere</item>vàostyles.xml


bạn nên đánh giá cao câu trả lời của tôi hơn! :)
Dipali s.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.