วิธีใช้แบบอักษรที่กำหนดเองในโครงการที่เขียนใน Android Studio


194

ฉันพยายามใช้แบบอักษรที่กำหนดเองใน Android Studio เหมือนที่เราทำใน Eclipse แต่น่าเสียดายที่ไม่สามารถระบุตำแหน่งที่จะวางโฟลเดอร์ 'ทรัพย์สิน' ได้!


นี่คือคำแนะนำอย่างเป็นทางการที่คุณสามารถตรวจสอบได้ developer.android.com/guide/topics/ui/look-and-feel/…
subrata sharma

คำตอบ:


344

อัปเดต 2020:

สร้างโฟลเดอร์ชื่อแบบอักษรภายในโฟลเดอร์resและคัดลอกแบบอักษรของคุณ

ป้อนคำอธิบายรูปภาพที่นี่

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

สำหรับการใช้งานแบบเป็นโปรแกรม:

textView.setTypeface(ResourcesCompat.getFont(context, R.font.abc_font))

10
ทุกคนที่โหลดแบบอักษรที่กำหนดเองจากเนื้อหาควรทราบว่ามีข้อผิดพลาดใน Android 5.0 ซึ่งแบบอักษรบางตัวไม่สามารถโหลดได้ ขณะที่ปัญหานี้ได้รับการแก้ไขใน Android 5.1 วิธีแก้ปัญหาสำหรับการสนับสนุน 5.0 คือการเขียนฟอนต์ ttf อีกครั้ง ดูปัญหานี้สำหรับข้อมูลเพิ่มเติมstackoverflow.com/questions/27269264/…
BrentM

ตัวเลือกที่สองทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน ขอบคุณสำหรับสิ่งนี้!
Emzor

2
ฉันใช้ this.getContext (). getApplicationContext (). getAssets () เพื่อค้นหาสารบบ (android studio 2.1)
kuzdu

1
@kuthue onCreate () ใช้ได้ หากคุณต้องการเปลี่ยนแบบอักษรในขณะที่ผู้ใช้กำลังใช้งานแอพคุณสามารถวางไว้ที่จุดที่คุณต้องการเปลี่ยน วิธีนี้ใช้ได้กับปุ่มด้วย
rockhammer

1
ฉันจะกำหนดให้แบบอักษรเริ่มต้นสำหรับทั้งโครงการจะเป็นแบบกำหนดเองที่ฉันเพิ่มได้อย่างไร นั่นคือสิ่งที่ตัวอย่างโค้ดแรกกำลังทำอยู่?
Yonatan Nir

98

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

  1. เลือกไฟล์> ใหม่> โฟลเดอร์> โฟลเดอร์สินทรัพย์

  2. คลิกเสร็จสิ้น

  3. คลิกขวาที่เนื้อหาและสร้างโฟลเดอร์ชื่อแบบอักษร

  4. วางไฟล์ฟอนต์ของคุณในเนื้อหา > แบบอักษร

  5. ใช้รหัสด้านล่างเพื่อเปลี่ยนแบบอักษรของ textView ของคุณ

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

12
วิธีใช้ใน xml
สวิส

4
บทช่วยสอนนี้ให้วิธีใช้งานใน XML: stacktips.com/tutorials/android/…
Dinesh

@Suisse ห้องสมุดสนับสนุน 26 ให้การสนับสนุนอย่างเต็มที่กับคุณลักษณะนี้บนอุปกรณ์ที่ใช้ API เวอร์ชัน 14 และลิงค์ที่
Ehsan.R

66

มีหลายวิธีในการตั้งค่าตระกูลแบบอักษรที่กำหนดเองในฟิลด์และฉันใช้แบบที่ด้านล่าง

ในการเพิ่มแบบอักษรเป็นทรัพยากรให้ทำตามขั้นตอนต่อไปนี้ใน Android Studio:

1) คลิกขวาที่โฟลเดอร์ res และไปที่ใหม่> ไดเรกทอรีทรัพยากร Android หน้าต่างไดเรกทอรีทรัพยากรใหม่จะปรากฏขึ้น

2) ในรายการประเภททรัพยากรให้เลือกแบบอักษรแล้วคลิกตกลง

หมายเหตุ: ชื่อของไดเรกทอรีทรัพยากรจะต้องเป็นแบบอักษร

3) เพิ่มไฟล์แบบอักษรของคุณในโฟลเดอร์แบบอักษร ป้อนคำอธิบายรูปภาพที่นี่

เพิ่มแบบอักษรในมุมมองที่ต้องการในไฟล์ xml ของคุณ:

ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุ: แต่คุณต้องการสิ่งต่าง ๆ ต่อไปนี้:

  1. Android Studio ขึ้นไป 3.0 นกขมิ้น

  2. กิจกรรมของคุณขยาย AppCompatActivity

  3. อัปเดตไฟล์ Gradle ของคุณเช่นนั้น:

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

buildtoolsVersionเหนือถึง 26 และต่ำสุดที่targetSdkVersionต้องการ 26

  1. เพิ่มการพึ่งพาในไฟล์ 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

42

ฉันคิดว่าแทนที่จะดาวน์โหลดไฟล์. ttf เราสามารถใช้แบบอักษร Google ได้ ใช้งานง่ายมาก มีเพียงคุณเท่านั้นที่ต้องทำตามขั้นตอนเหล่านี้ ขั้นตอนที่ 1)เปิด layout.xml ของโครงการของคุณและตระกูลแบบอักษรที่เลือกของมุมมองข้อความในแอตทริบิวต์ (สำหรับภาพหน้าจออ้างอิงที่แนบมา) ป้อนคำอธิบายรูปภาพที่นี่

ขั้นตอนที่ 2)ตัวเลือก in family family เลือกตัวเลือก More .. หากแบบอักษรของคุณไม่มี จากนั้นคุณจะเห็นหน้าต่างใหม่จะเปิดขึ้นคุณสามารถพิมพ์แบบอักษรที่ต้องการและเลือกแบบอักษรที่ต้องการจากรายการนั้น) ปกติตัวหนาตัวเอียง ฯลฯ ตามที่แสดงในภาพด้านล่าง ป้อนคำอธิบายรูปภาพที่นี่

ขั้นตอนที่ 3)จากนั้นคุณจะสังเกตเห็นว่าโฟลเดอร์แบบอักษรจะถูกสร้างขึ้นโดยอัตโนมัติในโฟลเดอร์ / res ที่มีไฟล์ xml แบบอักษรที่คุณเลือก

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นคุณสามารถใช้ตระกูลฟอนต์นี้ใน xml เป็นโดยตรง

      android:fontFamily="@font/josefin_sans_bold"

หรือตามหลักไวยากรณ์คุณสามารถทำได้โดยใช้

  Typeface typeface = ResourcesCompat.getFont(this, R.font.app_font);
  fontText.setTypeface(typeface);

นี่ไม่ใช่คำตอบสำหรับคำถาม Google ไม่สามารถใช้แบบอักษรทุกแบบได้
Matt Fletcher

2
คำตอบที่ดี! หากคุณไม่พบแบบอักษรของคุณในรายการ - โหลดไว้ในโฟลเดอร์สินทรัพย์หรือกำหนดผ่าน xml
Edgar Khimich

21

สวัสดีที่นี่เรามีวิธีที่ดีกว่าในการใช้แบบอักษรบน EditTexts และ TextViews บน Android พร้อมกันและนำไปใช้กับโครงการทั้งหมด

ก่อนอื่นคุณต้องสร้างโฟลเดอร์แบบอักษร นี่คือขั้นตอน

1: ไปที่ (โฟลเดอร์โครงการ) จากนั้นแอพ> src> หลัก

2: สร้างโฟลเดอร์ชื่อ 'asset / fonts' ลงในโฟลเดอร์หลัก

3: ใส่แบบอักษรของคุณลงในโฟลเดอร์แบบอักษร ที่นี่ฉันมี 'MavenPro-Regular.ttf'

นี่คือขั้นตอนสำหรับการใช้แบบอักษรที่กำหนดเองใน EditText และการใช้วิธีนี้คุณสามารถใช้แบบอักษรในทุกอินพุต

1: สร้าง Class MyEditText (ชื่อที่คุณต้องการ ... )

2: ซึ่งขยาย EditText

3: ใช้แบบอักษรของคุณ

นี่คือตัวอย่างรหัส;

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

}

และในที่นี่คือรหัสวิธีการใช้งาน

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

editText.setText("Hello");

หรือในไฟล์ xml ของคุณ

   <MyEditText
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:textColor="#fff"
    android:textSize="16dp"
    android:id="@+id/editText"
    />

คลาสนั้นให้ข้อผิดพลาดนั้นขณะรันไทม์: เกิดข้อผิดพลาดในการขยายคลาส MyEditText
GMX

อ้างถึงลิงค์นี้คุณอาจพบคำแนะนำวิธีการแก้ไขข้อผิดพลาด
โมฮัมหมัด Naim Dahee


ด้วยการสร้างปัจจุบันฉันคิดว่าคุณจะต้องเปลี่ยนสิ่งนี้เป็น "ขยาย AppCompatEditText"
ดีเซล

15

ด้วยฟอนต์ Support Library 26.0 (และ Android O) สามารถโหลดจากทรัพยากรได้อย่างง่ายดายด้วย: ป้อนคำอธิบายรูปภาพที่นี่

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

เอกสารสำหรับวิธีการ

ข้อมูลเพิ่มเติมสามารถดูได้ที่นี่


9

ฉันต้องการเพิ่มคำตอบสำหรับ Android-O และ Android Studio 2.4

  1. สร้างโฟลเดอร์ที่เรียกว่าอักษรภายใต้ความละเอียดโฟลเดอร์ ดาวน์โหลดฟอนต์ต่างๆที่คุณต้องการเพิ่มลงในตัวอย่างโครงการGoogle แบบอักษรของคุณ

  2. ภายในตระกูลฟอนต์ผู้ใช้ xml ของคุณ

    ตัวอย่าง:

    <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. หากคุณต้องการให้โปรแกรมใช้โค้ดต่อไปนี้

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

สำหรับข้อมูลเพิ่มเติมไปที่ลิงก์ไปยังบล็อกโพสต์ของฉันสไตล์ตัวอักษรสำหรับ Android ที่มี Android Studio 2.4


6
โปรดทราบว่าคุณต้องการประชาสัมพันธ์ผลิตภัณฑ์ / บล็อกของคุณเองคุณต้องเปิดเผยความร่วมมือมิฉะนั้นคำตอบของคุณอาจถูกตั้งค่าสถานะเป็นสแปม โปรดอ่านวิธีที่จะไม่เป็นผู้ส่งสแปม
DavidPostill

ใช่ @PetterFriberg
Suresh Maidaragi

8

ตามคุณสมบัติใหม่ที่มีอยู่ใน Android O ทรัพยากรแบบอักษรใน XMLนั้นสามารถใช้งานได้เหมือนกับคุณสมบัติใหม่

ในการเพิ่มแบบอักษรเป็นทรัพยากรให้ทำตามขั้นตอนต่อไปนี้ใน Android Studio:

1) คลิกขวาที่ละเอียดโฟลเดอร์และไปที่ใหม่> ไดเรกทอรีทรัพยากร หน้าต่างไดเรกทอรีทรัพยากรใหม่จะปรากฏขึ้น

2) ในรายการประเภททรัพยากรให้เลือกแบบอักษรแล้วคลิกตกลง

หมายเหตุ: ชื่อของไดเรกทอรีทรัพยากรจะต้องเป็นแบบอักษร

3) เพิ่มไฟล์แบบอักษรของคุณในโฟลเดอร์แบบอักษร

คุณสามารถเข้าถึงทรัพยากรแบบอักษรด้วยความช่วยเหลือของชนิดทรัพยากรแบบอักษรใหม่ ตัวอย่างเช่นในการเข้าถึงทรัพยากรแบบอักษรให้ใช้ @ font / myfont หรือ R.font.myfont

เช่น. Typeface typeface = getResources().getFont(R.font.myfont); textView.setTypeface(typeface);


2
ควรเป็น ResourcesCompat.getFont (บริบท, R.font.your_font)
Trung Le

7

คุณสามารถใช้งานง่ายและง่ายEasyFontsTextViewห้องสมุดบุคคลที่สามเพื่อความหลากหลายชุดของตัวอักษรที่กำหนดเองเพื่อคุณ ด้วยการใช้ไลบรารี่นี้คุณไม่ต้องกังวลกับการดาวน์โหลดและเพิ่มฟอนต์ในโฟลเดอร์ทรัพย์สิน / ฟอนต์ ยังเกี่ยวกับการสร้างวัตถุแบบอักษร คุณจะเป็นอิสระจากการสร้างโฟลเดอร์เนื้อหาด้วย

เพียง:

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

ไลบรารีนี้มีแบบอักษรหลายประเภท


6

ไฟล์ตัวแรกเพิ่ม font.ttf บนฟอนต์ Folder จากนั้นเพิ่มบรรทัดนี้ในวิธีการสร้าง

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

และนี่คือ xml ของฉัน

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

4
  1. สร้างเนื้อหาโฟลเดอร์ใน Project -> app (หรือชื่อแอพของคุณ) -> src -> main -> คลิกขวา -> New -> Directory
  2. จากนั้นสร้างไดเรกทอรีใหม่ภายในเนื้อหาที่เรียกว่า "แบบอักษร"

วิธีกำหนดแบบอักษรให้กับ textView:

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

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

your_font_name รวมถึงส่วนขยายแบบอักษร


3

หากคุณยังใหม่กับ Android เหมือนฉันนี่อาจเป็นเรื่องยุ่งยากเล็กน้อย ให้แน่ใจว่าคุณโทร:

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

onCreateวิธีการภายในวิธีเช่น


3

Android 8.0 (API 26) เปิดตัวฟีเจอร์ใหม่ที่เกี่ยวข้องกับแบบอักษร

1) แบบอักษรสามารถใช้เป็นทรัพยากรได้

2) แบบอักษรที่ดาวน์โหลดได้

หากคุณต้องการใช้แบบอักษรภายนอกในแอปพลิเคชัน Android ของคุณคุณสามารถรวมไฟล์แบบอักษรใน apk หรือกำหนดค่าแบบอักษรที่ดาวน์โหลดได้

การรวมไฟล์ฟอนต์ใน APK : คุณสามารถดาวน์โหลดไฟล์ฟอนต์, บันทึกไว้ใน res / font filer, กำหนดตระกูลฟอนต์และใช้ตระกูลฟอนต์ในสไตล์

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการใช้แบบอักษรที่กำหนดเองเป็นแหล่งข้อมูลโปรดดูที่http://www.zoftino.com/android-using-custom-fonts

การกำหนดค่าแบบอักษรที่ดาวน์โหลดได้ : กำหนดแบบอักษรโดยระบุรายละเอียดของผู้ให้บริการแบบอักษรเพิ่มใบรับรองผู้ให้บริการแบบอักษรและใช้แบบอักษรในรูปแบบ

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับแบบอักษรที่ดาวน์โหลดได้โปรดดูhttp://www.zoftino.com/downloading-fonts-android


2
เอกสารอย่างเป็นทางการ: developer.android.com/guide/topics/ui/look-and-feel/ …
Parziphal

1
นอกจากนี้เนื่องจากมีการแนะนำแบบอักษรแบบกำหนดเอง / ดาวน์โหลดได้ใน Android O (8.0) ไม่ได้หมายความว่าไม่มีความเข้ากันได้แบบย้อนหลัง โปรดดูเอกสารอย่างเป็นทางการเกี่ยวกับวิธีการใช้แบบอักษรที่กำหนดเอง โปรดทราบว่าคุณอาจต้องติดตั้ง Android Studio 3.0 เช่นกัน
anthonymonori

1

ก่อนสร้างassetsโฟลเดอร์จากนั้นสร้างfontsโฟลเดอร์ในนั้น

จากนั้นคุณสามารถตั้งค่าfontจากassetsหรือdirectoryชอบร้อง:

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

1

ขณะนี้มีหลายวิธีในการใช้ฟอนต์หนึ่งในวิธีที่ง่ายที่สุดคือ 1) คลิกขวาที่โฟลเดอร์ res ไปที่ New> ไดเรกทอรีทรัพยากร Android

2) จากรายการประเภททรัพยากรเลือกแบบอักษรแล้วคลิกตกลง

3) ใส่ไฟล์ฟอนต์ในโฟลเดอร์ฟอนต์


1

เพิ่มแบบอักษรของคุณไปยังโฟลเดอร์สินทรัพย์ในแอพ / src / main / assets สร้าง textview แบบกำหนดเองดังนี้:

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

}

เพิ่ม FontCache: เพื่อให้คุณไม่ต้องสร้างแบบอักษรซ้ำแล้วซ้ำอีกเช่น:

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

}

และคุณทำเสร็จแล้ว!

PSF จาก Android O คุณสามารถเพิ่มแบบอักษรได้โดยตรง


1

ใส่แบบอักษรในโฟลเดอร์เนื้อหาจากนั้นใช้แบบอักษร: '' แบบอักษรของคุณ


-1

สำหรับผู้อ่านใหม่

คุณสามารถใช้ไลบรารี มุมมองแบบอักษรที่กำหนดเองของ Gloxey ได้

ไล่ระดับ

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

วิธีใช้?

สร้างโฟลเดอร์สินทรัพย์ -> แบบอักษร คัดลอกแบบอักษรของคุณไปยังโฟลเดอร์แบบอักษร

ใช้แอพพร็อพเพอร์ตี้: font_name = "font_name_string"เพื่อใช้ฟอนต์ในมุมมอง

ตัวอย่าง

   <!--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" />
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.