Nilai yang valid untuk android: fontFamily dan peta mereka?

266

Dalam jawaban untuk pertanyaan ini , pengguna mencantumkan nilai android:fontFamilydan 12 varian (lihat di bawah). Dari mana nilai-nilai ini berasal? Dokumentasi untuk android:fontFamilytidak mencantumkan informasi ini di sembarang tempat (saya periksa di sini , dan di sini ). String terdaftar dalam file Android styles.xml di berbagai tempat, tetapi bagaimana cara memetakan ini kembali ke font Roboto?

Dari android 4.1 / 4.2, keluarga font Roboto berikut tersedia:

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)

dalam kombinasi dengan ini

android:textStyle="normal|bold|italic" 

12 varian dimungkinkan:

  • Reguler
  • Miring
  • Mencolok
  • Tebal miring
  • Cahaya
  • Ringan-miring
  • Tipis
  • Tipis-miring
  • Terkondensasi biasa
  • Cetak miring italic
  • Kental tebal
  • Kental tebal-miring

Dalam styles.xmlfile dalam aplikasi saya sedang mengerjakan seseorang yang mencantumkan ini sebagai font family, dan saya cukup yakin itu salah:

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

Saya ingin mengatur tema untuk aplikasi kami dengan benar (yang termasuk menggunakan fontFamily dengan benar) dan menghapus semua redundansi yang ada dalam beberapa gaya yang dibuat sebelum saya melihat file.

Christopher Perry
sumber

Jawaban:

346

Dari mana nilai-nilai ini berasal? Dokumentasi untuk android: fontFamily tidak mencantumkan informasi ini di sembarang tempat

Ini memang tidak tercantum dalam dokumentasi. Tetapi mereka disebutkan di sini di bagian 'Keluarga font'. Dokumen ini mencantumkan setiap API publik baru untuk Android Jelly Bean 4.1.

Dalam file styles.xml dalam aplikasi saya sedang mengerjakan seseorang yang mencantumkan ini sebagai keluarga font, dan saya cukup yakin itu salah:

Ya itu salah. Anda tidak mereferensikan file font, Anda harus menggunakan nama font yang disebutkan dalam dokumen tertaut di atas. Dalam hal ini seharusnya ini:

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

Seperti jawaban tertaut yang telah dinyatakan, 12 varian dimungkinkan:

Ditambahkan di Android Jelly Bean (4.1) - API 16:

Biasa (default):

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

Miring :

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

Berani :

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

Tebal-miring :

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

Cahaya :

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

Light-italic :

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

Tipis :

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

Tipis-miring :

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

Biasa kental :

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

Cetak miring italic :

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

Huruf tebal :

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

Kental tebal miring :

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

Ditambahkan di Android Lollipop (v5.0) - API 21:

Sedang :

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

Menengah-miring :

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

Hitam :

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

Untuk referensi cepat, beginilah tampilannya:

Ahmad
sumber
2
Haha: DI sebenarnya tahu tentang situs itu sebelumnya, jadi menemukan itu tidak sulit. Tetapi untuk referensi di masa mendatang: Saya lebih suka menggunakan pencarian di developer.android.com daripada pencarian google, karena Anda dapat membatasi pencarian hanya pada API, posting blog, catatan rilis dll.
Ahmad
8
Dan jika Anda tertarik: ini adalah di mana font didefinisikan. Kelas ini memuat font dan yang ini mengaturnya afaict.
Ahmad
1
@androiddeveloper selesai. Roboto black tidak mengacu pada warna font, tetapi hanya versi "lebih berani" dari Roboto Bold. Saya telah menambahkan gambar referensi di bagian bawah.
Ahmad
1
@Ahmad Terima kasih telah menjelaskan ini. Ini +1 Anda ... :)
pengembang android
2
juga, ada banyak alias untuk digunakan dengan fontFamily android.googlesource.com/platform/frameworks/base/+/master/data/…
Pauland
110

Font yang tersedia (per Oreo)

Pratinjau semua font

The Material Desain Tipografi halaman memiliki demo untuk beberapa font ini dan saran tentang memilih font dan gaya.

Untuk kode sleuth: fonts.xmladalah daftar font Android yang definitif dan terus berkembang.


Menggunakan font-font ini

Tetapkan android:fontFamilydan android:textStyleatribut, misalnya

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

ke nilai yang diinginkan dari tabel ini:

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 adalah font fallback; Anda tidak dapat menentukannya secara langsung)

Catatan: tabel ini berasal dari fonts.xml. Setiap nama dan gaya keluarga font tercantum dalam fonts.xml, mis

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

serif-monospacedengan demikian keluarga font, dan normalgaya.


Kesesuaian

Berdasarkan log fonts.xml dan system_fonts.xml sebelumnya , Anda dapat melihat kapan setiap font ditambahkan:

  • Sandwich Es Krim: Roboto biasa, tebal, miring, dan miring tebal
  • Jelly Bean: Roboto light, italic ringan, kental, kental tebal, miring kental, dan tebal tebal kental
  • Jelly Bean MR1: Roboto tipis dan tipis miring
  • Lollipop:
    • Roboto medium, italic medium, hitam, dan italic hitam
    • Noto Serif biasa, tebal, miring, tebal miring
    • Cutive Mono
    • Segera akan datang
    • Naskah Menari
    • Carrois Gothic SC
    • Noto Sans
  • Oreo MR1: Roboto medium medium
Newtonx
sumber
1
bagaimana Anda temukan di log tentang versi Android?
pengembang android
3
@androiddeveloper Saya melihat tanggal ketika setiap baris ditambahkan. Untuk mengetahui persis font mana yang tersedia dalam versi tertentu, lihat system_fonts.xml untuk versi itu, misalnya untuk Lollipop: android.googlesource.com/platform/frameworks/base/+/…
Newtonx
Satu-satunya keluhan saya tentang ini adalah itu bukan abjad: p Tapi tetap saja! Ini harus menjadi jawaban terbaik! Terima kasih!
T.Woody
9

Sejauh yang saya ketahui, Anda tidak dapat mendeklarasikan font khusus dalam xml atau tema. Saya biasanya hanya membuat kelas khusus memperluas tampilan teks yang mengatur font mereka sendiri di instantiation dan menggunakannya di file layout xml saya.

yaitu:

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

dan

<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" />
tersandung
sumber
1
Ini bisa menghabiskan banyak memori dalam recyclerview
Florescu Cătălin