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

W odpowiedzi na to pytanie użytkownik wymienia wartości dla android:fontFamily i 12 wariantów (patrz poniżej). Skąd biorą się te wartości? Dokumentacja android:fontFamily nie wymienia tych informacji w żadnym miejscu (sprawdziłem tutaj i tutaj). Ciągi są wymienione w stylach Androida .plik xml w różnych miejscach, ale w jaki sposób odwzorowują one czcionkę Roboto?

Z Androida 4.1 / 4.2, następujące rodziny czcionek Roboto to dostępne:

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 jest 12 wariantów:

  • Regular
  • kursywa
  • pogrubienie
  • pogrubienie-kursywa
  • Światło
  • Light-italic
  • cienki
  • Thin-italic
  • condensed regular
  • skondensowana kursywa
  • pogrubiona pogrubiona
  • Condensed bold-italic

W pliku styles.xml w aplikacja, nad którą pracuję ktoś wymienił to jako rodzinę czcionek i jestem prawie pewien, że jest źle:

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

Chciałbym, aby motyw naszej aplikacji został poprawnie skonfigurowany (co obejmuje prawidłowe używanie fontFamily) i usunąć wszystkie nadmiarowości, które są w niektórych stylach, które zostały utworzone, zanim spojrzałem na plik.

Author: Community, 2013-10-30

3 answers

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

W rzeczywistości 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 stylu.plik xml w aplikacji, nad którym pracuję ktoś wymienił to jako rodzinę czcionek i jestem prawie pewien, że to źle:

Tak, to źle. Nie odwołujesz się do pliku czcionki, musisz użyć nazwy czcionki wymienionej w powiązanym dokumencie powyżej. W tym przypadku powinno być tak:
<item name="android:fontFamily">sans-serif</item>

Jak już podała odpowiedź, możliwe jest 12 wariantów:

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

Regular (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>

Pogrubienie-kursywa :

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

Światło:

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

Cienki :

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

Thin-italic :

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

Skondensowana regularna :

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

Skondensowana kursywa :

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

Pogrubione :

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

Skondensowane pogrubienie-kursywa :

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

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

Medium :

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

Średniozaawansowany :

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

Dla szybkiego odniesienia, tak wyglądają wszystkie:

 318
Author: Ahmad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-09 11:12:30

Dostępne czcionki (od Oreo)

Podgląd wszystkich czcionek

Strona Material Design Typography zawiera dema niektórych z tych czcionek oraz sugestie dotyczące wyboru czcionek i stylów.

Dla kodów: fonts.xml jest definitywną i stale rozszerzającą się listą czcionek Androida.


Używanie tych czcionek

Ustaw atrybuty android:fontFamily i android:textStyle, np.

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

Do pożądanych wartości z tego tabela:

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ą awaryjną; nie można jej bezpośrednio określić)

Uwaga: ta tabela pochodzi z fonts.xml. Nazwa rodziny i styl każdej czcionki są wymienione w czcionkach.xml, np.

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

serif-monospace jest więc rodziną czcionek, a {[8] } jest stylem.


Zgodność

Na podstawie dziennika czcionek.xml i były system_fonts.xml , można zobaczyć kiedy każda czcionka była dodano:

  • Ice Cream Sandwich: Roboto regular, bold, italic, and bold italic
  • Jelly Bean: Roboto light, light italic, condensed, condensed bold, condensed italic, and condensed bold italic
  • Jelly Bean MR1: Roboto thin and thin italic
  • Lizak:
    • Roboto medium, medium italic, black, and black italic
    • Noto Serif regular, bold, italic, bold italic
    • Cut Mono
    • Już Wkrótce
    • Scenariusz Tańca
    • Carrois Gothic SC
    • Noto Sans
  • Oreo MR1: Roboto Condensed medium
 86
Author: Newtonx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-21 20:55:36

O ile mi wiadomo, nie można deklarować własnych czcionek w XML lub motywach. Zwykle robię niestandardowe klasy rozszerzające textview, które ustawiają własną czcionkę na instancji i używają tych w moich plikach XML układu.

Ie:

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" />
 9
Author: trippedout,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-31 00:01:30