Cara menggunakan font khusus dalam proyek yang ditulis di Android Studio

Jawaban:

344

Pembaruan 2020:

Buat folder bernama font di dalam folder res dan salin font Anda

masukkan deskripsi gambar di sini

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

Untuk penggunaan terprogram:

textView.setTypeface(ResourcesCompat.getFont(context, R.font.abc_font))
Asim Roy
sumber
10
Siapa pun yang memuat font khusus dari aset harus mencatat bahwa ada bug di Android 5.0 di mana beberapa font gagal dimuat. Sementara masalah ini diperbaiki di Android 5.1, solusi untuk mendukung 5.0 adalah dengan menulis ulang font ttf. Lihat masalah ini untuk informasi lebih lanjut stackoverflow.com/questions/27269264/…
BrentM
Opsi kedua bekerja sempurna untuk saya. Terima kasih untuk ini!
Emzor
2
saya menggunakan this.getContext (). getApplicationContext (). getAssets () untuk menemukan direktori (android studio 2.1)
kuzdu
1
@kueue onCreate () tidak masalah. Jika Anda ingin mengubah font saat pengguna menggunakan aplikasi, Anda dapat meletakkannya di titik yang Anda inginkan berubah. Ini juga berfungsi untuk tombol
rockhammer
1
Bagaimana saya dapat mengatur bahwa font default untuk seluruh proyek adalah yang saya tambahkan? Apakah itu yang dilakukan contoh kode pertama?
Yonatan Nir
98

https://i.stack.imgur.com/i6XNU.png

  1. Pilih File> Baru> Folder> Folder Aset

  2. Klik selesai

  3. Klik kanan pada aset dan buat folder yang disebut font

  4. Letakkan file font Anda di aset > font

  5. Gunakan kode di bawah ini untuk mengubah font textView Anda

    TextView textView = (TextView) findViewById(R.id.textView);
    Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/yourfont.ttf");
    textView.setTypeface(typeface);
    
Ehsan.R
sumber
12
bagaimana cara menggunakan ini di xml?
Suisse
4
Tutorial ini memberikan cara menggunakannya dalam XML: stacktips.com/tutorials/android/…
Dinesh
@Suisse The Support Library 26 menyediakan dukungan penuh untuk fitur ini pada perangkat yang menjalankan API versi 14 dan tautan yang
Ehsan.R
66

Ada banyak cara untuk mengatur keluarga font kustom di lapangan dan saya menggunakan seperti itu di bawah ini.

Untuk menambahkan font sebagai sumber daya, lakukan langkah-langkah berikut di Android Studio:

1) Klik kanan folder res dan pergi ke direktori sumber daya> Android baru. Jendela New Resource Directory muncul.

2) Di daftar Tipe sumber daya, pilih font, lalu klik OK.

Catatan: Nama direktori sumber daya harus font.

3) Tambahkan file font Anda di folder font. masukkan deskripsi gambar di sini

Tambahkan font dalam tampilan yang diinginkan dalam file xml Anda:

masukkan deskripsi gambar di sini

Catatan: Tetapi Anda memerlukan hal-hal berikut untuk itu:

  1. Android Studio di atas ke kenari 3.0.

  2. Aktivitas Anda memperluas AppCompatActivity.

  3. Perbarui file Gradle Anda seperti itu:

    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {        
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

buildtoolsVersiondi atas ke 26 dan minimum yang targetSdkVersiondiperlukan 26

  1. Tambahkan dependensi dalam file build.gradle:
classpath 'com.android.tools.build:gradle:3.0.0-beta4'
  1. gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
Vinod Makode
sumber
42

Saya pikir alih-alih mengunduh file .ttf kita dapat menggunakan font Google. Ini sangat mudah diterapkan. hanya Anda yang harus mengikuti langkah-langkah ini. langkah 1) Buka layout.xml proyek Anda dan keluarga font tertentu dari tampilan teks dalam atribut (untuk cuplikan layar referensi terlampir) masukkan deskripsi gambar di sini

langkah 2) Pilihan in font family pilih More fonts .. jika font Anda tidak ada. maka Anda akan melihat jendela baru akan terbuka, di sana Anda dapat mengetikkan font yang diperlukan Anda & pilih font yang diinginkan dari daftar itu yaitu) Reguler, Tebal, Miring dll. seperti yang ditunjukkan pada gambar di bawah ini. masukkan deskripsi gambar di sini

langkah 3) Kemudian Anda akan melihat folder font akan dibuat secara otomatis di / res folder yang memiliki file xml font yang Anda pilih.

masukkan deskripsi gambar di sini

Kemudian Anda dapat langsung menggunakan keluarga font ini dalam xml sebagai

      android:fontFamily="@font/josefin_sans_bold"

atau secara tata bahasa Anda dapat mencapai ini dengan menggunakan

  Typeface typeface = ResourcesCompat.getFont(this, R.font.app_font);
  fontText.setTypeface(typeface);
Sandeep Sankla
sumber
Ini bukan jawaban untuk pertanyaan itu. Tidak semua font tersedia di Google Fonts.
Matt Fletcher
2
Jawaban bagus! Jika Anda tidak dapat menemukan font Anda dalam daftar - muat di. Folder aset atau tentukan melalui xml
Edgar Khimich
21

Halo di sini kita memiliki cara yang lebih baik untuk menerapkan font di EditTeks dan TextViews di android sekaligus dan menerapkannya di seluruh proyek.

Pertama-tama Anda perlu membuat folder font. Inilah Langkah-langkahnya.

1: Buka (folder proyek) Kemudian app> src> main

2: Buat folder bernama 'aset / font' ke dalam folder utama.

3: Masukkan font Anda ke dalam folder font. Di Sini Saya Punya 'MavenPro-Regular.ttf'

Berikut adalah Langkah-langkah untuk menerapkan font khusus pada EditText dan menggunakan pendekatan ini Anda dapat menerapkan font pada setiap input.

1: Buat Kelas MyEditText (nama pilihan Anda ...)

2: yang memperluas EditText

3: Terapkan font Anda

Berikut ini contoh kode;

public class MyEditText extends EditText {

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

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

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

    private void init() {
        if (!isInEditMode()) {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/MavenPro-Regular.ttf");
            setTypeface(tf);
        }
    }

}

Dan di sini adalah kode cara menggunakannya.

MyEditText editText = (MyEditText) findViewById(R.id.editText);

editText.setText("Hello");

Atau di File xml Anda

   <MyEditText
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:textColor="#fff"
    android:textSize="16dp"
    android:id="@+id/editText"
    />
Mohammad Naim Dahee
sumber
Kelas itu memberi saya kesalahan saat runtime: Galat menggembungkan kelas MyEditText
GMX
Lihat Tautan ini Anda mungkin menemukan beberapa petunjuk bagaimana mengatasi Kesalahan.
Mohammad Naim Dahee
Dengan build saat ini, saya pikir Anda perlu mengubahnya untuk "extends AppCompatEditText".
Diesel
15

Dengan Support Library 26.0 (dan Android O) font dapat dimuat dari sumber dengan mudah dengan: masukkan deskripsi gambar di sini

Typeface typeface = ResourcesCompat.getFont(Context context, int fontResourceId) 

Documents untuk metode ini .

Info lebih lanjut dapat ditemukan di sini.

makata
sumber
9

Saya ingin menambahkan jawaban saya untuk Android-O dan Android Studio 2.4

  1. Buat folder bernama font di bawah folder res . Unduh berbagai font yang ingin Anda tambahkan ke proyek Anda, misalnya font Google

  2. Di dalam keluarga font pengguna xml Anda

    contoh:

    <TextView
        android:fontFamily="@font/indie_flower"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="@string/sample_text" />

3.Jika Anda menginginkannya dengan cara terprogram gunakan kode berikut

Typeface typeface = getResources().getFont(R.font.indie_flower);
textView.setTypeface(typeface);

untuk informasi lebih lanjut ikuti tautan ke posting blog saya Gaya font untuk Android dengan Android Studio 2.4

Suresh Maidaragi
sumber
6
Harap dicatat jika Anda ingin mempromosikan produk / blog Anda sendiri, Anda harus mengungkapkan afiliasi Anda , jika tidak, jawaban Anda mungkin ditandai sebagai spam. Harap baca Bagaimana tidak menjadi spammer
DavidPostill
Ya @PetterFriberg
Suresh Maidaragi
8

Sesuai fitur baru yang tersedia di Android O, sumber daya font dalam XML tersedia sebagai fitur baru.

Untuk menambahkan font sebagai sumber daya, lakukan langkah-langkah berikut di Android Studio:

1) Klik kanan folder res dan pergi ke direktori sumber daya> Android baru . Jendela New Resource Directory muncul.

2) Di daftar Tipe sumber daya, pilih font , lalu klik OK.

Catatan: Nama direktori sumber daya harus font.

3) Tambahkan file font Anda di folder font.

Anda dapat mengakses sumber daya font dengan bantuan jenis sumber daya baru, font. Misalnya, untuk mengakses sumber daya font, gunakan @ font / myfont, atau R.font.myfont.

misalnya. Typeface typeface = getResources().getFont(R.font.myfont); textView.setTypeface(typeface);

Dharmishtha
sumber
2
harus ResourcesCompat.getFont (konteks, R.font.your_font)
Trung Le
7

Anda dapat menggunakan pustaka pihak ketiga EasyFonts yang mudah & sederhana untuk mengatur berbagai jenis font khusus untuk Anda TextView. Dengan menggunakan perpustakaan ini Anda tidak perlu khawatir mengunduh dan menambahkan font ke folder aset / font. Juga tentang pembuatan objek Typeface. Anda akan bebas dari membuat folder aset juga.

Secara sederhana:

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

Ada banyak jenis font yang disediakan oleh perpustakaan ini.

Vijay Vankhede
sumber
6

Pertama tambahkan file font.ttf pada Folder font. Kemudian Tambahkan baris ini dalam metode onCreate

    Typeface typeface = ResourcesCompat.getFont(getApplicationContext(), R.font.myfont);
    mytextView.setTypeface(typeface);

Dan ini adalah xml saya

            <TextView
            android:id="@+id/idtext1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="7dp"
            android:gravity="center"
            android:text="My Text"
            android:textColor="#000"
            android:textSize="10sp"
        />
DEVSHK
sumber
4
  1. Buat aset folder di Project -> app (atau nama aplikasi Anda) -> src -> main -> klik kanan -> New -> Directory.
  2. Kemudian buat direktori baru di dalam aset yang disebut "font".

Untuk menetapkan font ke textView:

TextView textView = (TextView) findViewById(R.id.your_textView);

final Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/your_font_name");

nama_anda_Anda termasuk ekstensi font.

GmloMalo
sumber
3

Jika Anda sangat baru di Android seperti saya, ini bisa sedikit rumit. Pastikan Anda menelepon:

TextView myTextView = (TextView) findViewById(R.id.textView);
Typeface typeface=Typeface.createFromAsset(getAssets(), "fonts/your font.ttf");
myTextView.setTypeface(typeface);

metode dalam metode seperti onCreate.

pengguna4509901
sumber
3

Android 8.0 (API 26) memperkenalkan fitur baru yang terkait dengan font.

1) Font dapat digunakan sebagai sumber daya.

2) Fon yang dapat diunduh.

Jika Anda ingin menggunakan font eksternal dalam aplikasi Android Anda, Anda dapat memasukkan file font di apk atau mengkonfigurasi font yang dapat diunduh.

Termasuk file font di APK : Anda dapat mengunduh file font, menyimpannya dalam res / font filer, mendefinisikan keluarga font dan menggunakan keluarga font dalam gaya.

Untuk detail lebih lanjut tentang penggunaan font khusus sebagai sumber, lihat http://www.zoftino.com/android-using-custom-fonts

Mengkonfigurasi font yang dapat diunduh : Tentukan font dengan memberikan rincian penyedia font, tambahkan sertifikat penyedia font dan gunakan font dalam gaya.

Untuk detail lebih lanjut tentang font yang dapat diunduh lihat http://www.zoftino.com/downloading-fonts-android

Arnav Rao
sumber
1
Selain itu, hanya karena font yang dapat diunduh / diperkenalkan di Android O (8.0), tidak berarti tidak ada kompatibilitas ke belakang untuk itu. Silakan lihat dokumentasi resmi tentang cara menerapkan Font Kustom. Harap dicatat Anda mungkin perlu menginstal Android Studio 3.0 juga.
anthonymonori
1

Pertama buat assetsfolder lalu buat fontsfolder di dalamnya.

Kemudian Anda dapat mengatur fontdari assetsatau directoryseperti di bawah ini:

public class FontSampler extends Activity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        TextView tv = (TextView) findViewById(R.id.custom);
        Typeface face = Typeface.createFromAsset(getAssets(), "fonts/HandmadeTypewriter.ttf");

        tv.setTypeface(face);

        File font = new File(Environment.getExternalStorageDirectory(), "MgOpenCosmeticaBold.ttf");

        if (font.exists()) {
            tv = (TextView) findViewById(R.id.file);
            face = Typeface.createFromFile(font);

            tv.setTypeface(face);
        } else {
            findViewById(R.id.filerow).setVisibility(View.GONE);
        }
    }
} 

sumber
1

Sekarang ada begitu banyak cara untuk menerapkan font. Salah satu cara termudah adalah seperti ini, 1) Klik kanan folder res pergi ke New> Android resource directory.

2) Dari daftar Jenis sumber daya, pilih font, lalu klik OK.

3) Letakkan file font Anda di folder font.

Priya
sumber
1

Tambahkan font Anda ke folder aset di app / src / main / aset buat tampilan teks khusus seperti ini:

class CustomLightTextView : TextView {

constructor(context: Context) : super(context){
    attachFont(context)
}
constructor(context: Context, attrs: AttributeSet):    super(context, attrs){
    attachFont(context)
}
constructor(context: Context, attrs: AttributeSet?,    defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
    attachFont(context)
}
fun attachFont(context: Context) {
    this.setTypeface(FontCache.getInstance().getLightFont(context))
}

}

Tambahkan FontCache: Agar Anda tidak perlu membuat jenis huruf lagi dan lagi seperti:

class FontCache private constructor(){

val fontMap = HashMap<String,Typeface>()

companion object {
    private var mInstance : FontCache?=null
    fun getInstance():FontCache = mInstance?: synchronized(this){
        return mInstance?:FontCache().also { mInstance=it }
    }
}

fun getLightFont(context: Context):Typeface?{
    if(!fontMap.containsKey("light")){
        Typeface.createFromAsset(context.getAssets(),"Gotham-Book.otf");
        fontMap.put("light",Typeface.createFromAsset(context.getAssets(),"Gotham-Book.otf"))
    }
    return fontMap.get("light")
}

}

Dan Anda selesai!

PSFdari Android O, Anda dapat langsung menambahkan font.

ROHIT LIEN
sumber
1

letakkan font di folder aset lalu terapkan fontfamily: '' font Anda


sumber
-1

Untuk pembaca baru

Anda dapat menggunakan perpustakaan ini Gloxey Custom Font Views

ketergantungan gradle

  dependencies{
           compile 'io.gloxey.cfv:custom-font-views:1.0.2'
    }

Cara Penggunaan?

Buat aset folder -> font . Salin font Anda ke folder font .

Gunakan aplikasi properti : font_name = "font_name_string" untuk menerapkan font pada tampilan.

Contoh

   <!--Font Names in srings.xml-->
       <string name="aadhunik">aadhunik.ttf</string>
       <string name="kung_fool">kungfool.ttf</string>
       <string name="skrova">skrova.otf</string>
       <string name="painting_in_the_sun_light">painting_in_the_sun_light.ttf</string>

   <!--Include views in layout.xml-->
       <io.gloxey.cfv.CFTextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:text="Aadhunik"
       android:textColor="#ff00"
       android:textSize="40sp"
       app:font_name="@string/aadhunik" />

       <io.gloxey.cfv.CFButton
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Kung Fool"
       android:textColor="#154748"
       app:font_name="@string/kung_fool" />

       <io.gloxey.cfv.CFEditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:text="Hello world"
       android:textSize="30sp"
       app:font_name="@string/skrova" />

       <io.gloxey.cfv.CFCheckBox
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center"
       android:text="Painting In The Sun Light"
       android:textSize="30sp"
       app:font_name="@string/painting_in_the_sun_light" />
Adnan Bin Mustafa
sumber