So verwenden Sie eine benutzerdefinierte Schriftart in einem in Android Studio geschriebenen Projekt

190

Ich habe versucht, in Android Studio eine benutzerdefinierte Schriftart zu verwenden, wie wir es in Eclipse getan haben. Konnte aber leider nicht herausfinden, wo der Ordner "Assets" abgelegt werden soll!

Asim Roy
quelle
Hier ist der offizielle Leitfaden, den Sie überprüfen können. developer.android.com/guide/topics/ui/look-and-feel/…
subrata sharma

Antworten:

335

Update 2020:

Erstellen Sie einen Ordner mit dem Namen font im Ordner res und kopieren Sie Ihre Schriftart

Geben Sie hier die Bildbeschreibung ein

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fontFamily="@font/abc_font" />

Für den programmatischen Gebrauch:

textView.setTypeface(ResourcesCompat.getFont(context, R.font.abc_font))
Asim Roy
quelle
10
Jeder, der benutzerdefinierte Schriftarten aus Assets lädt, sollte beachten, dass es in Android 5.0 einen Fehler gibt, bei dem einige Schriftarten nicht geladen werden können. Während dieses Problem in Android 5.1 behoben wurde, besteht eine Problemumgehung für die Unterstützung von 5.0 darin, ttf-Schriftarten neu zu schreiben. Weitere Informationen finden
BrentM
Die zweite Option hat bei mir perfekt funktioniert. Danke dafür!
Emzor
2
Ich habe this.getContext (). getApplicationContext (). getAssets () verwendet, um das Verzeichnis (Android Studio 2.1) zu finden
Kuzdu
1
@kuthue onCreate () ist in Ordnung. Wenn Sie die Schriftart ändern möchten, während der Benutzer die App verwendet, können Sie sie an der Stelle platzieren, an der sie geändert werden soll. Dies funktioniert auch für Knöpfe
Rockhammer
1
Wie kann ich festlegen, dass die Standardschriftart für das gesamte Projekt die benutzerdefinierte ist, die ich hinzufüge? Ist es das, was das erste Codebeispiel tut?
Yonatan Nir
97

https://i.stack.imgur.com/i6XNU.png

  1. Wählen Sie Datei> Neu> Ordner> Assets-Ordner

  2. Klicken Sie auf Fertig stellen

  3. Klicken Sie mit der rechten Maustaste auf Assets und erstellen Sie einen Ordner mit dem Namen Schriftarten

  4. Fügen Sie Ihre Schriftartdatei in Assets > Schriftarten ein

  5. Verwenden Sie den folgenden Code, um die Schriftart Ihrer textView zu ändern

    TextView textView = (TextView) findViewById(R.id.textView);
    Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/yourfont.ttf");
    textView.setTypeface(typeface);
Ehsan.R
quelle
12
Wie benutzt man das in XML?
Suisse
4
Dieses Tutorial gibt, wie man es in einem XML verwendet: stacktips.com/tutorials/android/…
Dinesh
@Suisse Die Support-Bibliothek 26 bietet volle Unterstützung für diese Funktion auf Geräten mit API-Versionen 14 und höher Link
Ehsan.R
65

Es gibt viele Möglichkeiten, eine benutzerdefinierte Schriftfamilie für das Feld festzulegen, und ich verwende diese unten.

Führen Sie im Android Studio die folgenden Schritte aus, um Schriftarten als Ressourcen hinzuzufügen:

1) Klicken Sie mit der rechten Maustaste auf den Ordner res und gehen Sie zu Neu> Android-Ressourcenverzeichnis. Das Fenster Neues Ressourcenverzeichnis wird angezeigt.

2) Wählen Sie in der Liste Ressourcentyp die Schriftart aus und klicken Sie auf OK.

Hinweis: Der Name des Ressourcenverzeichnisses muss Schriftart sein.

3) Fügen Sie Ihre Schriftdateien in den Schriftordner ein. Geben Sie hier die Bildbeschreibung ein

Fügen Sie in der gewünschten Ansicht eine Schriftart in Ihre XML-Datei ein:

Geben Sie hier die Bildbeschreibung ein

Hinweis: Dafür haben Sie jedoch Folgendes benötigt:

  1. Android Studio über 3.0 Kanarienvogel.

  2. Ihre Aktivität erweitert AppCompatActivity.

  3. Aktualisieren Sie Ihre Gradle-Datei folgendermaßen:

    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {        
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

buildtoolsVersionüber 26 und mindestens targetSdkVersionerforderlich 26

  1. Fügen Sie Abhängigkeiten in die Datei build.gradle ein:
classpath 'com.android.tools.build:gradle:3.0.0-beta4'
  1. gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
Vinod Makode
quelle
41

Ich denke, anstatt die .ttf-Datei herunterzuladen, können wir Google-Schriftarten verwenden. Es ist sehr einfach zu implementieren. Nur Sie müssen diese Schritte befolgen. Schritt 1) Öffnen Sie die Datei layout.xml Ihres Projekts und die ausgewählte Schriftfamilie der Textansicht in Attributen (als Referenz ist ein Screenshot beigefügt). Geben Sie hier die Bildbeschreibung ein

Schritt 2) Wählen Sie in der Schriftfamilie Weitere Schriftarten aus, wenn Ihre Schrift nicht vorhanden ist. Dann wird ein neues Fenster geöffnet. Dort können Sie die gewünschte Schriftart eingeben und die gewünschte Schriftart aus dieser Liste auswählen, z. B. "Normal", "Fett", "Kursiv" usw. (siehe Abbildung unten). Geben Sie hier die Bildbeschreibung ein

Schritt 3) Dann werden Sie feststellen, dass automatisch ein Schriftartenordner im Ordner / res mit der ausgewählten XML-Datei für Schriftarten generiert wird.

Geben Sie hier die Bildbeschreibung ein

Dann können Sie diese Schriftfamilie direkt in XML als verwenden

      android:fontFamily="@font/josefin_sans_bold"

oder programmatisch können Sie dies erreichen, indem Sie verwenden

  Typeface typeface = ResourcesCompat.getFont(this, R.font.app_font);
  fontText.setTypeface(typeface);
Sandeep Sankla
quelle
Dies ist keine Antwort auf die Frage. Nicht jede Schriftart ist in Google Fonts verfügbar.
Matt Fletcher
2
Gute Antwort! Wenn Sie Ihre Schriftart nicht in der Liste finden können, laden Sie sie in den Assets-Ordner oder definieren Sie sie über die XML-
Datei
21

Hallo, hier haben wir eine bessere Möglichkeit, Schriftarten auf EditTexts und TextViews auf Android gleichzeitig anzuwenden und im gesamten Projekt anzuwenden.

Zunächst müssen Sie einen Schriftartenordner erstellen. Hier sind Schritte.

1: Gehen Sie zum (Projektordner) Dann App> src> main

2: Erstellen Sie Ordner mit dem Namen "Assets / Fonts" im Hauptordner.

3: Legen Sie Ihre Schriftarten in den Schriftartenordner. Hier habe ich 'MavenPro-Regular.ttf'

Hier sind die Schritte zum Anwenden benutzerdefinierter Schriftarten auf EditText. Mit diesem Ansatz können Sie Schriftarten auf jede Eingabe anwenden.

1: Erstellen Sie eine Klasse MyEditText (Ihr bevorzugter Name ...)

2: erweitert EditText

3: Wenden Sie Ihre Schriftart an

Hier ist Codebeispiel;

public class MyEditText extends EditText {

    public MyEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyEditText(Context context) {
        super(context);
        init();
    }

    private void init() {
        if (!isInEditMode()) {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/MavenPro-Regular.ttf");
            setTypeface(tf);
        }
    }

}

Und hier ist der Code, wie man es benutzt.

MyEditText editText = (MyEditText) findViewById(R.id.editText);

editText.setText("Hello");

Oder in Ihrer XML-Datei

   <MyEditText
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:textColor="#fff"
    android:textSize="16dp"
    android:id="@+id/editText"
    />
Mohammad Naim Dahee
quelle
Diese Klasse gab mir diesen Fehler zur Laufzeit: Fehler beim Aufblasen der Klasse MyEditText
GMX
Unter diesem Link finden Sie möglicherweise einige Hinweise zur Behebung des Fehlers.
Mohammad Naim Dahee
Ich denke, Sie müssten dies beim aktuellen Build in "AppCompatEditText erweitern" ändern.
Diesel
15

Mit Support Library 26.0 (und Android O) können Schriftarten einfach aus folgenden Ressourcen geladen werden: Geben Sie hier die Bildbeschreibung ein

Typeface typeface = ResourcesCompat.getFont(Context context, int fontResourceId) 

Dokumente für die Methode .

Weitere Infos finden Sie hier.

Makata
quelle
9

Ich möchte meine Antwort für Android-O und Android Studio 2.4 hinzufügen

  1. Erstellen Sie einen Ordner mit dem Namen font unter dem Ordner res . Laden Sie die verschiedenen Schriftarten herunter, die Sie Ihrem Projektbeispiel hinzufügen möchten. Google-Schriftarten

  2. Innerhalb Ihrer XML-Benutzerschriftfamilie

    Beispiel:

    <TextView
        android:fontFamily="@font/indie_flower"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="@string/sample_text" />

3.Wenn Sie möchten, dass es programmgesteuert ausgeführt wird, verwenden Sie den folgenden Code

Typeface typeface = getResources().getFont(R.font.indie_flower);
textView.setTypeface(typeface);

Für weitere Informationen folgen Sie dem Link zu meinem Blog-Beitrag Schriftstile für Android mit Android Studio 2.4

Suresh Maidaragi
quelle
6
Bitte beachten Sie, dass Sie Ihre Zugehörigkeit offenlegen müssen, wenn Sie für Ihr eigenes Produkt / Blog werben möchten. Andernfalls wird Ihre Antwort möglicherweise als Spam gekennzeichnet. Bitte lesen Sie Wie man kein Spammer ist
DavidPostill
Ja @PetterFriberg
Suresh Maidaragi
8

Gemäß der neuen Funktion in Android O Schriftartenressourcen in XMLGemäß der neuen Funktion als neue Funktion verfügbar.

Führen Sie im Android Studio die folgenden Schritte aus, um Schriftarten als Ressourcen hinzuzufügen:

1) Klicken Sie mit der rechten Maustaste auf den Ordner res und gehen Sie zu Neu> Android-Ressourcenverzeichnis . Das Fenster Neues Ressourcenverzeichnis wird angezeigt.

2) Wählen Sie in der Liste Ressourcentyp die Schriftart aus und klicken Sie auf OK.

Hinweis: Der Name des Ressourcenverzeichnisses muss Schriftart sein.

3) Fügen Sie Ihre Schriftdateien in den Schriftordner ein.

Sie können mithilfe eines neuen Ressourcentyps, der Schriftart, auf die Schriftartenressourcen zugreifen. Verwenden Sie beispielsweise @ font / myfont oder R.font.myfont, um auf eine Schriftartressource zuzugreifen.

z.B. Typeface typeface = getResources().getFont(R.font.myfont); textView.setTypeface(typeface);

Dharmishtha
quelle
2
sollte ResourcesCompat.getFont sein (Kontext, R.font.your_font)
Trung Le
7

Sie können die einfache EasyFonts- Bibliothek eines Drittanbieters verwenden, um eine Vielzahl von benutzerdefinierten Schriftarten für Ihre Bibliothek festzulegenTextView . Wenn Sie diese Bibliothek verwenden, müssen Sie sich keine Gedanken über das Herunterladen und Hinzufügen von Schriftarten zum Ordner "Assets / Fonts" machen. Auch über die Erstellung von Schriftobjekten. Sie können auch keinen Asset-Ordner erstellen.

Einfach:

TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(EasyFonts.robotoThin(this));

Es gibt viele Arten von Schriftarten, die von dieser Bibliothek bereitgestellt werden.

Vijay Vankhede
quelle
6

1. Fügen Sie die Datei font.ttf zum Schriftartenordner hinzu. Fügen Sie dann diese Zeile in die onCreate-Methode ein

    Typeface typeface = ResourcesCompat.getFont(getApplicationContext(), R.font.myfont);
    mytextView.setTypeface(typeface);

Und hier ist meine XML

            <TextView
            android:id="@+id/idtext1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="7dp"
            android:gravity="center"
            android:text="My Text"
            android:textColor="#000"
            android:textSize="10sp"
        />
DEVSHK
quelle
4
  1. Erstellen Sie Ordner-Assets in Projekt -> App (oder Ihrem App-Namen) -> src -> main -> Rechtsklick -> Neu -> Verzeichnis.
  2. Erstellen Sie dann ein neues Verzeichnis in Assets mit dem Namen "Schriftarten".

So weisen Sie der Textansicht die Schriftart zu:

TextView textView = (TextView) findViewById(R.id.your_textView);

final Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/your_font_name");

Ihr_Font_name enthält die Font-Erweiterung.

GmloMalo
quelle
3

Wenn Sie wie ich sehr neu in Android sind, kann dies etwas schwierig sein. Stellen Sie sicher, dass Sie anrufen:

TextView myTextView = (TextView) findViewById(R.id.textView);
Typeface typeface=Typeface.createFromAsset(getAssets(), "fonts/your font.ttf");
myTextView.setTypeface(typeface);

Methode innerhalb einer Methode wie onCreate.

user4509901
quelle
3

Android 8.0 (API 26) führte neue Funktionen für Schriftarten ein.

1) Schriftarten können als Ressourcen verwendet werden.

2) Herunterladbare Schriftarten.

Wenn Sie externe Schriftarten in Ihrer Android-Anwendung verwenden möchten, können Sie entweder Schriftdateien in apk aufnehmen oder herunterladbare Schriftarten konfigurieren.

Einschließen von Schriftdateien in APK : Sie können Schriftdateien herunterladen, in res / font filer speichern, die Schriftfamilie definieren und die Schriftfamilie in Stilen verwenden.

Weitere Informationen zur Verwendung benutzerdefinierter Schriftarten als Ressourcen finden Sie unter http://www.zoftino.com/android-using-custom-fonts

Konfigurieren von herunterladbaren Schriftarten : Definieren Sie die Schriftart, indem Sie Details zum Schriftartanbieter angeben, ein Zertifikat für den Schriftanbieter hinzufügen und die Schriftart in Stilen verwenden.

Weitere Informationen zu herunterladbaren Schriftarten finden Sie unter http://www.zoftino.com/downloading-fonts-android

Arnav Rao
quelle
2
Offizielle Dokumentation: developer.android.com/guide/topics/ui/look-and-feel/…
Parziphal
1
Nur weil benutzerdefinierte / herunterladbare Schriftarten in Android O (8.0) eingeführt wurden, bedeutet dies nicht, dass es keine Abwärtskompatibilität dafür gibt. Weitere Informationen zum Implementieren von benutzerdefinierten Schriftarten finden Sie in der offiziellen Dokumentation. Bitte beachten Sie, dass möglicherweise auch Android Studio 3.0 installiert sein muss.
Anthonymonori
1

Erst assetsOrdner erstellen , dann fontsOrdner darin erstellen .

Dann können Sie fontvon assetsoder directorywie folgt einstellen :

public class FontSampler extends Activity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        TextView tv = (TextView) findViewById(R.id.custom);
        Typeface face = Typeface.createFromAsset(getAssets(), "fonts/HandmadeTypewriter.ttf");

        tv.setTypeface(face);

        File font = new File(Environment.getExternalStorageDirectory(), "MgOpenCosmeticaBold.ttf");

        if (font.exists()) {
            tv = (TextView) findViewById(R.id.file);
            face = Typeface.createFromFile(font);

            tv.setTypeface(face);
        } else {
            findViewById(R.id.filerow).setVisibility(View.GONE);
        }
    }
} 

quelle
1

Jetzt gibt es so viele Möglichkeiten, Schriftarten anzuwenden. Eine der einfachsten Möglichkeiten ist folgende: 1) Klicken Sie mit der rechten Maustaste auf den Ordner res und gehen Sie zu Neu> Android-Ressourcenverzeichnis.

2) Wählen Sie in der Liste Ressourcentyp die Schriftart aus und klicken Sie auf OK.

3) Legen Sie Ihre Schriftdateien in den Schriftordner.

Priya
quelle
1

Fügen Sie Ihre Schriftarten zum Assets-Ordner in App / src / main / Assets hinzu. Erstellen Sie eine benutzerdefinierte Textansicht wie folgt:

class CustomLightTextView : TextView {

constructor(context: Context) : super(context){
    attachFont(context)
}
constructor(context: Context, attrs: AttributeSet):    super(context, attrs){
    attachFont(context)
}
constructor(context: Context, attrs: AttributeSet?,    defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
    attachFont(context)
}
fun attachFont(context: Context) {
    this.setTypeface(FontCache.getInstance().getLightFont(context))
}

}}

FontCache hinzufügen: Damit Sie nicht immer wieder eine Schrift erstellen müssen, wie:

class FontCache private constructor(){

val fontMap = HashMap<String,Typeface>()

companion object {
    private var mInstance : FontCache?=null
    fun getInstance():FontCache = mInstance?: synchronized(this){
        return mInstance?:FontCache().also { mInstance=it }
    }
}

fun getLightFont(context: Context):Typeface?{
    if(!fontMap.containsKey("light")){
        Typeface.createFromAsset(context.getAssets(),"Gotham-Book.otf");
        fontMap.put("light",Typeface.createFromAsset(context.getAssets(),"Gotham-Book.otf"))
    }
    return fontMap.get("light")
}

}}

Und du bist fertig!

PS Von Android O können Sie direkt Schriftarten hinzufügen.

ROHIT LIEN
quelle
1

Legen Sie Schriftarten in den Asset-Ordner und wenden Sie die Schriftfamilie an: '' Ihre Schriftarten


quelle
-1

Für neue Leser

Sie können diese Bibliothek Gloxey Custom Font Views verwenden

Gradle-Abhängigkeit

  dependencies{
           compile 'io.gloxey.cfv:custom-font-views:1.0.2'
    }

Wie benutzt man?

Ordner- Assets erstellen -> Schriftarten . Kopieren Sie Ihre Schriftarten in den Schriftartenordner .

Verwenden Sie die Eigenschafts- App: font_name = "font_name_string" , um die angezeigte Schriftart anzuwenden.

Beispiel

   <!--Font Names in srings.xml-->
       <string name="aadhunik">aadhunik.ttf</string>
       <string name="kung_fool">kungfool.ttf</string>
       <string name="skrova">skrova.otf</string>
       <string name="painting_in_the_sun_light">painting_in_the_sun_light.ttf</string>

   <!--Include views in layout.xml-->
       <io.gloxey.cfv.CFTextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:text="Aadhunik"
       android:textColor="#ff00"
       android:textSize="40sp"
       app:font_name="@string/aadhunik" />

       <io.gloxey.cfv.CFButton
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Kung Fool"
       android:textColor="#154748"
       app:font_name="@string/kung_fool" />

       <io.gloxey.cfv.CFEditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:text="Hello world"
       android:textSize="30sp"
       app:font_name="@string/skrova" />

       <io.gloxey.cfv.CFCheckBox
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center"
       android:text="Painting In The Sun Light"
       android:textSize="30sp"
       app:font_name="@string/painting_in_the_sun_light" />
Adnan Bin Mustafa
quelle