Prawidłowe wartości dla Androida: fontFamily i do czego mapują?

266

W odpowiedzi na to pytanie użytkownik podaje wartości android:fontFamilyi 12 wariantów (patrz poniżej). Skąd pochodzą te wartości? Dokumentacja android:fontFamilynie zawiera tych informacji w żadnym miejscu (sprawdziłem tutaj i tutaj ). Ciągi są wymienione w pliku Android styles.xml w różnych miejscach, ale w jaki sposób mapują one z powrotem na czcionkę Roboto?

W Androidzie 4.1 / 4.2 dostępne są następujące rodziny czcionek 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)

w połączeniu z tym

android:textStyle="normal|bold|italic" 

Możliwe są 12 wariantów:

  • Regularny
  • italski
  • Pogrubienie
  • Pogrubiona kursywa
  • Lekki
  • Jasno-kursywa
  • Chudy
  • Cienka kursywa
  • Skondensowane regularne
  • Skrócona kursywa
  • Skondensowane pogrubienie
  • Skrócony pogrubiony kursywą

W styles.xmlpliku w aplikacji pracuję nad kimś wymienionym jako rodzina czcionek i jestem prawie pewien, że to źle:

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

Chciałbym poprawnie skonfigurować motyw dla naszej aplikacji (który obejmuje prawidłowe użycie fontFamily) i usunąć nadmiarowość w niektórych stylach, które zostały utworzone, zanim przejrzałem plik.

Christopher Perry
źródło

Odpowiedzi:

346

Skąd pochodzą te wartości? Dokumentacja dla Androida: fontFamily nie wymienia tych informacji w żadnym miejscu

Rzeczywiście nie są one wymienione w dokumentacji. Ale są one wymienione tutaj w sekcji „Rodziny czcionek”. Dokument zawiera listę wszystkich nowych publicznych API dla Androida Jelly Bean 4.1.

W pliku styles.xml w aplikacji pracuję nad kimś wymienionym jako rodzina czcionek i jestem pewien, że to źle:

Tak, to źle. Nie odwołujesz się do pliku czcionek, musisz użyć nazwy czcionki wymienionej w połączonym dokumencie powyżej. W tym przypadku powinno być tak:

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

Jak już wspomniano w odpowiedzi na link, możliwe jest 12 wariantów:

Dodano w Android Jelly Bean (4.1) - API 16:

Zwykły (domyślnie):

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

Kursywa :

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

Pogrubienie :

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

Pogrubiona kursywą :

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

Lekki :

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

Jasno-kursywa :

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

Chudy :

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

Cienka kursywa :

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

Skondensowane regularne :

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

Skrócona kursywa :

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

Skondensowane pogrubienie :

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

Skrócony pogrubiony kursywą :

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

Dodano w Androidzie Lollipop (v5.0) - API 21:

Średnie :

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

Kursywa średnia :

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

Czarny :

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

W skrócie wyglądają one tak:

Ahmad
źródło
2
Haha: DI faktycznie wcześniej wiedział o tej stronie, więc znalezienie jej nie było trudne. Ale do wglądu w przyszłości: wolę korzystać z wyszukiwania na developer.android.com zamiast z wyszukiwarki Google, ponieważ możesz ograniczyć wyszukiwanie tylko do API, postów na blogu, informacji o wydaniu itp.
Ahmad
8
A jeśli jesteś zainteresowany: To jest miejsce, gdzie czcionki są zdefiniowane. Ta klasa ładuje czcionki, a ta zarządza nimi po awarii.
Ahmad
1
@ androiddeveloper gotowe. Roboto black nie odnosi się do koloru czcionki, ale jest po prostu „odważniejszą” wersją Roboto Bold. Dodałem obraz referencyjny na dole.
Ahmad
1
@Ahmad Dziękujemy za wyjaśnienie tego. Oto Twoje +1 ... :)
programista Androida
2
ponadto istnieje wiele aliasów do użycia z fontFamily android.googlesource.com/platform/frameworks/base/+/master/data/…
Pauland
110

Dostępne czcionki (od Oreo)

Podgląd wszystkich czcionek

Materiał projektowe typografia zawiera demonstracje niektórych z tych czcionek oraz sugestie dotyczące wyboru czcionek i stylów.

Dla oszustów kodu: fonts.xmljest ostateczną i stale rozwijającą się listą czcionek Androida.


Korzystanie z tych czcionek

Ustaw atrybuty android:fontFamilyi android:textStyle, np

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

do żądanych wartości z tej tabeli:

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 jest czcionką zastępczą; nie można jej określić bezpośrednio)

Uwaga: ta tabela pochodzi od fonts.xml. Nazwa i styl każdej czcionki jest wymieniony w pliku fonts.xml, np

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

serif-monospacejest zatem rodziną czcionek i normaljest stylem.


Zgodność

Oparte na protokole z fonts.xml i byłego system_fonts.xml można zobaczyć, gdy każda czcionka dodano:

  • Ice Cream Sandwich: Roboto regularna, pogrubiona, kursywa i pogrubiona kursywa
  • Jelly Bean: Lekka Roboto, lekka kursywa, skondensowana, skrócona pogrubiona, skondensowana kursywa i skondensowana pogrubiona kursywa
  • Jelly Bean MR1: Roboto cienki i cienki kursywą
  • Lizak:
    • Roboto średnia, średnia kursywa, czarna i czarna kursywa
    • Noto Serif regularne, pogrubione, kursywa, pogrubiona kursywa
    • Cutive Mono
    • Wkrótce
    • Dancing Script
    • Carrois Gothic SC
    • Noto Sans
  • Oreo MR1: Skondensowane medium Roboto
Newtonx
źródło
1
jak znalazłeś w logu wersję Androida?
programista Androida
3
@androiddeveloper Patrzyłem na daty dodania każdej linii. Aby dokładnie wiedzieć, które czcionki są dostępne w konkretnej wersji, spójrz na system_fonts.xml dla tej wersji, np. Dla Lollipop: android.googlesource.com/platform/frameworks/base/+/…
Newtonx
Moim jedynym zastrzeżeniem jest to, że nie jest to alfabetycznie: p Ale nadal! To powinna być najlepsza odpowiedź! Dziękuję Ci!
T.Woody
9

O ile mi wiadomo, nie można zadeklarować niestandardowych czcionek w formacie XML lub motywach. Zwykle tworzę niestandardowe klasy rozszerzające widok tekstu, które ustawiają własną czcionkę przy tworzeniu instancji i używam tych w moich plikach xml układu.

to znaczy:

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

i

<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" />
potknął się
źródło
1
Może to kosztować dużo pamięci w widoku recyklera
Florescu Cătălin