Verwenden von Schriftarten in XML in API < 26

Lesezeit: 6 Minuten

Benutzeravatar von sziraqui
sziraqui

https://developer.android.com/preview/features/working-with-fonts.html

Android API 26 unterstützt dies, aber haben wir eine Unterstützungsbibliothek, die die Verwendung von Schriftarten als Ressource in res bereitstellen kann? [ font in XML ] Wenn ja, bis zu welcher API wird es unterstützt?

Ich spreche von der Android O SDK-Funktion, mit der wir die Schriftart in XML festlegen können, wie im obigen Link angegeben. Ich bin mir sicher, dass dies keine native Funktion in MM ist.

  • Ich verwende diese Funktion in einer meiner Apps, die API 9 bis API 18 unterstützt. Soweit ich weiß, gibt es keine Einschränkung. Ich habe die Unterstützung von API 8 eingestellt, aber ich denke, es hätte auch damit funktioniert.

    – Phantômaxx

    12. Juni 2017 um 18:13 Uhr


  • Welche Bibliothek hast du zu Gradle hinzugefügt?

    – sziraqui

    12. Juni 2017 um 18:15 Uhr

  • KEINER. Es ist eine native Funktion. Übrigens braucht Eclipse das ganze “Gradle-Ding” nicht 😉

    – Phantômaxx

    12. Juni 2017 um 18:15 Uhr


  • Ich glaube, ich werde missverstanden. Ich spreche von der Funktion “Schriftart in XML”, die in O eingeführt wurde. Bearbeitete Frage zur Klärung

    – sziraqui

    12. Juni 2017 um 18:20 Uhr


  • with some little trick != eine native Funktion

    – sziraqui

    22. Juli 2017 um 20:21 Uhr

Benutzeravatar von Yuri Misyac
Yuri Misyac

Um die Schriftfamilie zu unterstützen API niedriger als 26, müssen wir verwenden

<font app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont-Regular"/>

anstatt

<font android:fontStyle="normal" android:fontWeight="400" android:font="@font/myfont-Regular"/>

Laut Google wird es unterstützt Android 4.0+ (API 14+) solange diese Bedingungen erfüllt sind:

  • Sie verwenden die Bibliothek unterstützen Ausführung 26.0.0-beta1 oder später
  • Du benutzt AppCompat

Quellen:

Schriftarten in XML – Verwenden der Unterstützungsbibliothek

Überarbeitungsverlauf der Support-Bibliothek

Ich hatte gehofft, dass ich dies in App-Widgets auf Android-Versionen vor 8 (API 26) verwenden könnte, aber es ist nicht möglich, da AppCompatTextView nicht in App-Widgets verwendet werden kann. Keine der Drittanbieter-Alternativen zu den „Fonts in XML“ von Android O wie z Kalligrafie Bibliothek funktioniert auch nicht in App-Widgets.

Die einzige Alternative für App-Widgets ist die Verwendung einer Bildansicht anstelle einer Textübersicht und verwenden RemoteViews Methoden wie z setImageViewUri(…) und setImageViewBitmap(…)beides problematisch.

  • Vielen Dank. Warum haben andere gesagt, dass es sich um eine native Funktion handelt? Ich verwende SDK Android Studio 2.3.2. Ich habe versucht, @font/arial.ttf zu verwenden. Es hat nicht funktioniert. Ich habe die Support-Bibliotheksversion 25.3.1 verwendet. Jetzt weiß ich, was falsch war.

    – sziraqui

    21. Juli 2017 um 9:37 Uhr

  • hat das funktioniert? Einige Leute sagen, dass Sie auf Android Studio 3 aktualisieren müssen, damit dies funktioniert.

    – Benutzer1506104

    20. Dezember 2017 um 12:50 Uhr

  • Danke für den Hinweis. Ich habe meine in geändert und es funktioniert jetzt.

    – tmm1

    9. Januar 2018 um 22:17 Uhr


Benutzeravatar von Jemshit Iskenderov
Jemshit Iskenderov

Um die Antwort von Yuri zu vervollständigen, werden Schriftarten bis API 16 unterstützt. Um eine Schriftartfamilie zu erstellen (wo unterschiedliche Schriftstärken angegeben sind), sollten Sie erstellen my_font_family.xml unter /res/font/ wie geschrieben im doc:

<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
    <font app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont_regular"/>
    <font app:fontStyle="normal" app:fontWeight="600" app:font="@font/myfont_semi_bold" />
    <font app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont_italic" />
</font-family>

Um dies zu verwenden TextView xml, sollten Sie verwenden app:fontFamily="@font/my_font_family"sei vorsichtig mit app: anstatt android:.

Konkret zu wählen fontWeightkönnen Sie verwenden android:textFontWeight="200" aber es funktioniert nur auf API>=28. Um eine andere Schriftart basierend auf dem Gewicht vor API 28 auszuwählen, haben Sie zwei Möglichkeiten. Sie können entweder verwenden android:textStyle="bold" um nur “normal/kursiv/fett” anzugeben, aber kein genaues Gewicht. Oder Sie können direkt eine bestimmte Schriftstärke wie folgt verwenden: app:fontFamily="@font/myfont_semi_bold".

Bitte beachten Sie: Wenn Sie eine benutzerdefinierte Textansicht verwenden, YourTextViewin Ihrer App muss es erweitert werden AppCompatTextView und nicht nur android.widget.TextView

  • Hast du versucht textFontWeight? Denn selbst auf API 28 funktioniert es bei mir nicht.

    – Florian Walther

    14. April 2019 um 18:02 Uhr

  • Bei mir funktioniert es nicht, ich laufe in einem Emulator. Ich verwende die Implementierung ‘androidx.appcompat:appcompat:1.0.2’ und das Design MaterialComponents

    – Ganesh Chowdhary Sadanala

    9. August 2019 um 14:07 Uhr


  • @GaneshChowdharySadanala Bitte überprüfen Sie die hinzugefügte Notiz, die Ihnen helfen könnte.

    – JaydeepW

    29. März 2020 um 6:30 Uhr

  • Die textStyle-Lösung funktioniert nicht auf Android 5 mit Support-Bibliothek

    – AAverin

    12. April 2021 um 14:34 Uhr

Einige Benutzer landen auf dieser Seite und suchen nach Anweisungen zur Verwendung benutzerdefinierter Schriftarten in Ihrer App aus XML. So habe ich es gemacht:

Das Font-Ressourcenverzeichnis ist standardmäßig nicht vorhanden. Sie können es manuell erstellen, indem Sie den Anweisungen folgen Dokumentation hier [too much work]

Oder verwenden Sie die Schriftartauswahl von GUI-

  • Wählen Sie auf der Registerkarte Design eine TextView aus.

  • Öffnen Sie das Drop-down-Menü von fontFamily xml-Attribut.

  • Scrollen Sie nach unten zu “Weitere Schriftarten”.

  • Wählen Sie im angezeigten Popup-Fenster eine „herunterladbare Schriftart“ aus.

Android Studio erstellt automatisch ein Font-Ressourcenverzeichnis mit den erforderlichen Deklarationen, die in der obigen Dokumentation erwähnt werden. Nach diesem Schritt können Sie Ihre benutzerdefinierte Schriftartdatei (z. B. myfont.ttf) in das Schriftartenverzeichnis kopieren und Ihre gewünschte Schriftart beispielsweise aus XML festlegen:

<TextView
     android:fontFamily="@font/myfont"
     android:id="@+id/aboutus_head_textview"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="@string/who_are_we" />

Wenn Sie in Ihrer gesamten App dieselbe Schriftart verwenden möchten, können Sie fontFamily Ihr AppTheme in styles.xml festlegen:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!-- custom font for the entire app -->
        <item name="fontFamily">@font/myfont</item>
    </style>

[ prefix fontFamily with android: if above did not work ]

Screenshots:

Screenshot 1

Screenshot 2

Hinweis: Diese Antwort geht davon aus, dass Sie Android Studio 3+ verwenden und Bibliotheksversion 26+ unterstützen

Hier ist ein Beispiel, min. SDK-Unterstützung 18 (in App)

https://github.com/mukundrd/androidFonts

  • Ist es möglich, ältere APIs einzubinden?

    – rraallvv

    24. Juni 2019 um 15:44 Uhr

Benutzeravatar von ValdaXD
ValdaXD

Dies könnte ein unerwünschter Weg sein, aber wenn Sie eine globale Schriftart (Schriftart) in XML haben, können Sie einfach eine Textansicht erstellen und die Schriftart von dort abrufen

TextView dummy = new TextView(context);
doSomethingWithTheTypeface(dummy.getTypeface());

  • Ist es möglich, ältere APIs einzubinden?

    – rraallvv

    24. Juni 2019 um 15:44 Uhr

1438630cookie-checkVerwenden von Schriftarten in XML in API < 26

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy