android:fontFamily için geçerli değerler ve neye eşlenirler?

Bu soruya]1 verilen yanıtta kullanıcı android:fontFamily ve 12 varyant için değerler listelemektedir (aşağıya bakınız). Bu değerler nereden geliyor? android:fontFamily` dokümantasyonu bu bilgiyi hiçbir yerde listelemiyor (burada ve burada kontrol ettim). Dizeler Android styles.xml dosyasında çeşitli yerlerde listeleniyor, ancak bunlar Roboto yazı tipiyle nasıl eşleşiyor?

Android 4.1 / 4.2'den itibaren aşağıdaki Roboto yazı tipi aileleri mevcut:

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)

bununla birlikte

android:textStyle="normal|bold|italic"

12 varyant mümkündür:

  • Normal
  • İtalik
  • Kalın
  • Bold-italik
  • Işık
  • Açık italik
  • İnce
  • İnce italik
  • Yoğunlaştırılmış normal
  • Yoğunlaştırılmış italik
  • Yoğunlaştırılmış kalın
  • Yoğunlaştırılmış kalın-italik

Üzerinde çalıştığım uygulamadaki styles.xml dosyasında birisi bunu font ailesi olarak listelemiş ve bunun yanlış olduğundan oldukça eminim:

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

Uygulamamız için temayı doğru bir şekilde ayarlamak (fontFamily'yi doğru bir şekilde kullanmayı da içerir) ve dosyaya bakmadan önce oluşturulan bazı stillerdeki tüm fazlalıkları kaldırmak istiyorum.

Çözüm

Bu değerler nereden geliyor? android:fontFamily için dokümantasyon bu bilgiyi herhangi bir yerde listelemiyor

Bunlar gerçekten de belgelerde listelenmemiştir. Ancak 'Yazı tipi aileleri' bölümü altında burada bahsedilmektedir. Belge, Android Jelly Bean 4.1 için her yeni genel API'yi listeler.

Üzerinde çalıştığım uygulamadaki styles.xml dosyasında birisi bunu font ailesi olarak listelemiş ve bunun yanlış olduğundan oldukça eminim:

Evet, bu yanlış. Yazı tipi dosyasını referans almazsınız, yukarıdaki bağlantılı belgede belirtilen yazı tipi adını kullanmanız gerekir. Bu durumda bu olmalıydı:

sans-serif

Bağlantılı cevapta da belirtildiği gibi, 12 varyant mümkündür:

Android Jelly Bean (4.1) - API 16'da eklendi:

Normal (varsayılan):

sans-serif
normal 

İtalyanca:

sans-serif
italic

Bold:

sans-serif
bold

Bold-italic:

sans-serif
bold|italic

Işık:

sans-serif-light
normal

Light-italic:

sans-serif-light
italic

İnce:

sans-serif-thin
normal

İnce italik:

sans-serif-thin
italic

Yoğunlaştırılmış normal:

sans-serif-condensed
normal

Kondense italik:

sans-serif-condensed
italic

Koyulaştırılmış kalın:

sans-serif-condensed
bold

Yoğunlaştırılmış kalın italik:

sans-serif-condensed
bold|italic

Android Lollipop (v5.0) - API 21'de eklendi:

Orta:

sans-serif-medium
normal

Orta-italik:

sans-serif-medium
italic

Siyah:

sans-serif-black
italic

Hızlı referans için, hepsi bu şekilde görünüyor:

Yorumlar (25)

Mevcut yazı tipleri (Oreo'dan itibaren)

Material Design Typography]2 sayfasında bu fontlardan bazılarının demoları ve font ve stil seçimine ilişkin öneriler yer alıyor.

Kod hafiyeleri için: fonts.xml Android yazı tiplerinin kesin ve sürekli genişleyen listesidir.


Bu yazı tiplerini kullanma

Örneğin android:fontFamily ve android:textStyle niteliklerini ayarlayın.


bu tablodan istenen değerlere ayarlayın:

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 bir yedek yazı tipidir; bunu doğrudan belirtemezsiniz)

Not:_ Bu tablo fonts.xml'den türetilmiştir. Her yazı tipinin aile adı ve stili fonts.xml'de listelenir, örn.


    CutiveMono.ttf

serif-monospace böylece yazı tipi ailesidir ve normal stildir.


Uyumluluk

fonts.xml dosyasının log ve eski system_fonts.xml dosyasına dayanarak, her bir yazı tipinin ne zaman eklendiğini görebilirsiniz:

  • Dondurmalı Sandviç:** Roboto normal, kalın, italik ve kalın italik
  • Jelly Bean:** Roboto light, light italic, condensed, condensed bold, condensed italic ve condensed bold italic
  • Jelly Bean MR1: Roboto ince ve ince italik
  • Lolipop:
    • Roboto orta, orta italik, siyah ve siyah italik
    • Noto Serif normal, kalın, italik, kalın italik
    • Cutive Mono
    • Çok Yakında
    • Dans Senaryosu
    • Carrois Gothic SC
    • Noto Sans
  • Oreo MR1: Roboto yoğunlaştırılmış ortam
Yorumlar (4)

Bildiğim kadarıyla, xml veya temalarda özel yazı tipleri bildiremezsiniz. Ben genellikle textview'i genişleten ve örnekleme sırasında kendi yazı tiplerini ayarlayan özel sınıflar oluşturuyorum ve bunları düzen xml dosyalarımda kullanıyorum.

Yani:

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

ve

Yorumlar (1)