ค่าที่ถูกต้องสำหรับ Android: fontFamily และสิ่งที่พวกเขาแผนที่ไป?


266

ในคำตอบสำหรับคำถามนี้ผู้ใช้แสดงรายการค่าสำหรับandroid:fontFamilyและ 12 ตัวแปร (ดูด้านล่าง) คุณค่าเหล่านี้มาจากไหน เอกสารสำหรับandroid:fontFamilyไม่แสดงรายการข้อมูลนี้ในสถานที่ใด ๆ (ฉันตรวจสอบที่นี่และที่นี่ ) สตริงแสดงอยู่ในไฟล์Android styles.xmlในหลาย ๆ ที่ แต่แมปเหล่านี้กลับไปเป็นแบบอักษร Roboto ได้อย่างไร

จาก android 4.1 / 4.2 จะมีตระกูลฟอนต์ Roboto ดังต่อไปนี้:

android:fontFamily="sans-serif"           // roboto regular  
android:fontFamily="sans-serif-light"     // roboto light  
android:fontFamily="sans-serif-condensed" // roboto condensed  
android:fontFamily="sans-serif-thin"      // roboto thin (android 4.2)  
android:fontFamily="sans-serif-medium"    // roboto medium (android 5.0)

ร่วมกับสิ่งนี้

android:textStyle="normal|bold|italic" 

12 สายพันธุ์ที่เป็นไปได้:

  • ปกติ
  • ตัวเอียง
  • กล้า
  • ตัวหนาเอียง
  • เบา
  • แสงตัวเอียง
  • ผอม
  • บางตัวเอียง
  • ข้นปกติ
  • ตัวเอียงแบบย่อ
  • กล้าได้กล้าเสีย
  • ข้นหนาตัวเอียง

ในstyles.xmlไฟล์ในแอปพลิเคชันฉันกำลังทำงานกับใครบางคนที่ระบุว่านี่เป็นตระกูลตัวอักษรและฉันค่อนข้างแน่ใจว่ามันผิด:

<item name="android:fontFamily">Roboto-Regular.ttf</item>

ฉันต้องการได้รับชุดรูปแบบสำหรับแอปของเราตั้งค่าอย่างถูกต้อง (ซึ่งรวมถึงการใช้ fontFamily อย่างถูกต้อง) และลบความซ้ำซ้อนทั้งหมดที่อยู่ในรูปแบบที่สร้างขึ้นก่อนที่ฉันจะดูไฟล์

คำตอบ:


346

คุณค่าเหล่านี้มาจากไหน เอกสารสำหรับ Android: fontFamily ไม่ได้แสดงรายการข้อมูลนี้ในที่ใด ๆ

สิ่งเหล่านี้ไม่ได้ระบุไว้ในเอกสารประกอบ แต่พวกเขาจะกล่าวถึงที่นี่ภายใต้ส่วน 'ครอบครัวแบบอักษร' เอกสารแสดงรายการ API สาธารณะใหม่สำหรับ Android Jelly Bean 4.1

ในไฟล์ styles.xml ในแอปพลิเคชันฉันกำลังทำงานกับใครบางคนที่ระบุว่านี่เป็นตระกูลตัวอักษรและฉันค่อนข้างมั่นใจว่ามันผิด:

ใช่มันผิด คุณไม่ได้อ้างอิงไฟล์ฟอนต์คุณต้องใช้ชื่อฟอนต์ที่กล่าวถึงในเอกสารที่ลิงก์ด้านบน ในกรณีนี้ควรเป็นดังนี้:

<item name="android:fontFamily">sans-serif</item>

เช่นเดียวกับคำตอบที่ระบุไว้แล้วมี 12 รูปแบบที่เป็นไปได้:

เพิ่มใน Android Jelly Bean (4.1) - API 16:

ปกติ (ค่าเริ่มต้น):

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">normal</item> 

ตัวเอียง :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">italic</item>

หนา :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold</item>

ตัวหนา - ตัวเอียง :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold|italic</item>

แสง :

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">normal</item>

ตัวเอียงแสง :

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">italic</item>

ผอม :

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">normal</item>

ตัวเอียงบาง :

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">italic</item>

ข้นปกติ :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">normal</item>

ตัวเอียงแบบย่อ :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">italic</item>

ตัวหนา :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold</item>

ตัวหนาตัวเอียงย่อ :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold|italic</item>

เพิ่มใน Android Lollipop (v5.0) - API 21:

ปานกลาง :

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">normal</item>

ตัวเอียงปานกลาง :

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">italic</item>

ดำ :

<item name="android:fontFamily">sans-serif-black</item>
<item name="android:textStyle">italic</item>

สำหรับการอ้างอิงอย่างรวดเร็วนี่คือลักษณะที่ปรากฏทั้งหมด:


2
ฮ่าฮ่า: DI รู้จริงเกี่ยวกับเว็บไซต์ก่อนหน้านั้นดังนั้นการค้นหามันจึงไม่ยาก แต่สำหรับการอ้างอิงในอนาคต: ฉันต้องการใช้การค้นหาบน developer.android.com ผ่านการค้นหาของ Google เนื่องจากคุณสามารถ จำกัด การค้นหาเฉพาะของ API, โพสต์บล็อก, บันทึกประจำรุ่น ฯลฯ
Ahmad

8
และถ้าคุณสนใจ: นี่คือแบบอักษรที่กำหนดไว้ ชั้นนี้โหลดแบบอักษรและคนนี้จัดการพวกเขา afaict
Ahmad

1
@androiddeveloper เรียบร้อยแล้ว Roboto black ไม่ได้อ้างอิงถึงสีของแบบอักษร แต่เป็นเพียง Roboto Bold รุ่น "ยิ่งเข้มขึ้น" ฉันได้เพิ่มรูปภาพอ้างอิงที่ด้านล่าง
Ahmad

1
@Ahmad ขอบคุณสำหรับคำชี้แจงนี้ นี่คือ +1 ของคุณ ... :)
พัฒนา Android

2
นอกจากนี้ยังมีนามแฝงจำนวนมากที่ใช้กับ fontFamily android.googlesource.com/platform/frameworks/base/+/master/data/?hl=th
Pauland

110

แบบอักษรที่มี (จาก Oreo)

ดูตัวอย่างแบบอักษรทั้งหมด

ตัวอย่างการออกแบบวัสดุมีตัวอย่างสำหรับแบบอักษรและคำแนะนำเกี่ยวกับการเลือกแบบอักษรและสไตล์

สำหรับนักสืบโค้ด: fonts.xmlเป็นรายการแบบอักษร Android ที่ชัดเจนและไม่มีที่สิ้นสุด


ใช้แบบอักษรเหล่านี้

ตั้งค่าandroid:fontFamilyและandroid:textStyleคุณสมบัติเช่น

<!-- Roboto Bold -->
<TextView
    android:fontFamily="sans-serif"
    android:textStyle="bold" />

ไปยังค่าที่ต้องการจากตารางนี้:

Font                     | android:fontFamily          | android:textStyle
-------------------------|-----------------------------|-------------------
Roboto Thin              | sans-serif-thin             |
Roboto Light             | sans-serif-light            |
Roboto Regular           | sans-serif                  |
Roboto Bold              | sans-serif                  | bold
Roboto Medium            | sans-serif-medium           |
Roboto Black             | sans-serif-black            |
Roboto Condensed Light   | sans-serif-condensed-light  |
Roboto Condensed Regular | sans-serif-condensed        |
Roboto Condensed Medium  | sans-serif-condensed-medium |
Roboto Condensed Bold    | sans-serif-condensed        | bold
Noto Serif               | serif                       |
Noto Serif Bold          | serif                       | bold
Droid Sans Mono          | monospace                   |
Cutive Mono              | serif-monospace             |
Coming Soon              | casual                      |
Dancing Script           | cursive                     |
Dancing Script Bold      | cursive                     | bold
Carrois Gothic SC        | sans-serif-smallcaps        |

(Noto Sans เป็นแบบอักษรสำรองคุณไม่สามารถระบุได้โดยตรง)

หมายเหตุ:fonts.xmlตารางนี้ได้มาจาก ชื่อและสไตล์ของแบบอักษรแต่ละตัวจะแสดงรายการใน fonts.xml เช่น

<family name="serif-monospace">
    <font weight="400" style="normal">CutiveMono.ttf</font>
</family>

serif-monospaceเป็นตระกูลตัวอักษรและnormalเป็นสไตล์


ความเข้ากันได้

ขึ้นอยู่กับการเข้าสู่ระบบของ fonts.xml และอดีตsystem_fonts.xmlคุณสามารถเห็นเมื่อตัวอักษรแต่ละถูกบันทึก:

  • Ice Cream Sandwich: Roboto เป็นตัวหนาตัวเอียงตัวหนาและตัวหนาแบบปกติของ Roboto
  • Jelly Bean:แสง Roboto, ตัวเอียงแสง, แบบย่อ, ตัวหนาแบบย่อ, ตัวเอียงแบบย่อและตัวหนาแบบย่อ
  • Jelly Bean MR1: Roboto ตัวเอียงที่บางและบาง
  • Lollipop:
    • Roboto ขนาดกลาง, ตัวเอียงขนาดกลาง, ตัวเอียงสีดำและสีดำ
    • Noto Serif ตัวหนาตัวเอียงตัวหนาตัวหนาปกติ
    • Cutive Mono
    • เร็ว ๆ นี้
    • สคริปต์การเต้นรำ
    • Carrois Gothic SC
    • Noto Sans
  • Oreo MR1: Roboto สื่อกลาง

1
คุณพบบันทึกในเวอร์ชัน Android ได้อย่างไร?
นักพัฒนาซอฟต์แวร์ Android

3
@androiddeveloper ฉันกำลังดูวันที่ที่เพิ่มแต่ละบรรทัด หากต้องการทราบอย่างแม่นยำว่าแบบอักษรใดที่มีอยู่ในรุ่นใดรุ่นหนึ่งให้ดูที่ system_fonts.xml สำหรับรุ่นนั้นเช่น Lollipop: android.googlesource.com/platform/frameworks/base/+/
นิวตัน

สิ่งเดียวที่ฉันจับได้ในเรื่องนี้คือมันไม่ได้เรียงตามตัวอักษร: p แต่ก็ยัง! นี่ควรเป็นคำตอบที่ดีที่สุด! ขอบคุณ!
T.Woody

9

เท่าที่ฉันทราบคุณไม่สามารถประกาศแบบอักษรที่กำหนดเองใน xml หรือธีมได้ ฉันมักจะทำคลาสที่กำหนดเองขยายมุมมองข้อความที่ตั้งค่าแบบอักษรของตนเองในอินสแตนซ์และใช้ในไฟล์ xml เลย์เอาต์ของฉัน

เช่น:

public class Museo500TextView extends TextView {
    public Museo500TextView(Context context, AttributeSet attrs) {
        super(context, attrs);      
        this.setTypeface(Typeface.createFromAsset(context.getAssets(), "path/to/font.ttf"));
    }
}

และ

<my.package.views.Museo900TextView
        android:id="@+id/dialog_error_text_header"
        android:layout_width="190dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textSize="12sp" />

1
นี่อาจทำให้คุณเสียความทรงจำมากมายในมุมมองรีไซเคิล
Florescu Cătălin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.