web-dev-qa-db-de.com

Festlegen der Roboto-Schriftart in TextView - xml

Ich habe mehrere Beiträge zu diesem Thema gefunden, aber bei allen diesen Themen wird entweder die Schriftart mit der setTypeFace()-Methode für ein TextView-Objekt festgelegt oder eine benutzerdefinierte Klasse erstellt, die die Schriftart auf Roboto und extendsTextView setzt. Soweit ich es von API-Level 11 (?) Oder etwas weiß, können wir das TypeFace als XML-Attribut festlegen. So was:

   <TextView
      Android:id="@+id/profileHeader"
      Android:layout_width="100dp"
      Android:layout_height="100dp"
      Android:typeface="roboto"
      Android:text="Hello, world">
   </TextView>

Was ist der richtige Weg, dies zu tun? Ist ein Fallback möglich, wenn die Anwendung auf einem Gerät ausgeführt wird, das niedriger ist als API-Level 11 (?), Z.

 Android:typeface="roboto|monospace|serif"

Schauen Sie sich das Projekt RobotoTextView an. Funktioniert bis zu Android 1.5 und Sie können die Schrift mithilfe von XML-Attributen festlegen. Es enthält auch andere Ansichten wie RobotoButton, RobotoCheckbox usw.

6
cnnr

Ab JellyBean (4.1) können Sie die in diesem StackOverflow-Thema bereitgestellte Methode verwenden. Wenn Sie auf Monospace oder Serif zurückgreifen müssen, deklarieren Sie einen Ordner layout-v16, in dem Sie die Schriftart verwenden, die Sie gewählt haben (z. B. "serifenlos-komprimiert") und in Im Standardordner verwenden Sie die Schriftart "Monospace" oder "Serif". Wenn Sie auf eine nicht standardmäßige Schriftart zurückgreifen möchten, können Sie die Android-Version programmgesteuert überprüfen und die entsprechende Aktion auswählen.

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
    TextView textView = (TextView) findViewById(R.id.textView_id);
    Typeface myFont = Typeface.createFromAsset(getAssets(),"RobotoCondensed.ttf");
    textView.setTypeface(myFont);
}
1

Dies ist für zukünftige Leute, die sich mit dem gleichen Thema beschäftigen wie ich. Das Einstellen von Schriftbildern beansprucht beim Laden mehrerer Zeilen viel Speicherplatz. Verwenden Sie die folgenden beiden Codes zusammen, damit es reibungslos funktioniert. Ich habe die Lösung von stackoverflow erhalten, aber die Antworten wurden nicht zusammen aufgelistet.

public class RobotoTextView extends TextView {

Context context;

public RobotoTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    this.context = context;
}

public RobotoTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
}

public RobotoTextView(Context context) {
    super(context);
    this.context = context;
}

public void setTypeface(Typeface tf, int style) {
    if (!isInEditMode()) {
        if (style == Typeface.NORMAL) {
            super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-Light.ttf"));
        } else if (style == Typeface.ITALIC) {
            super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-LightItalic.ttf"));
        } else if (style == Typeface.BOLD) {
            super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-Bold.ttf"));
        } else if (style == Typeface.BOLD_ITALIC) {
            super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-BoldItalic.ttf"));
        }

    }
}



public class TypeFaceProvider {

private static Hashtable<String, Typeface> sTypeFaces = new Hashtable<String, Typeface>(
        4);

public static Typeface getTypeFace(Context context, String fileName) {
    Typeface tempTypeface = sTypeFaces.get(fileName);

    if (tempTypeface == null) {
        tempTypeface = Typeface.createFromAsset(context.getAssets(),
                fileName);
        sTypeFaces.put(fileName, tempTypeface);
    }

    return tempTypeface;
}
}
1
hafridi

Sie können die Schriftart nicht direkt aus Assets festlegen, wie in onCreate beschrieben. Dies macht dasselbe, was Sie tun möchten.

TextView tvTextView = (TextView) findViewById(R.id.textView1);
Typeface typeface = Typeface.createFromAsset(getAssets(),"Roboto.ttf");
tvTextView.setTypeface(typeface);

Hoffe, es wird dir helfen.:D

1
sachin

Das Android:typeface-Attribut hat nur wenige gültige Optionen (gemäß den Android-Dokumenten) ... 

  • normal
  • sans
  • serif
  • monospace

Wenn Sie die Roboto-Schriftart in Ihrer App für ältere Geräte benötigen, müssen Sie die Roboto-TTF-Dateien in Ihr Projekt einbeziehen. 

Die naheliegendste Methode zur Verwendung dieser Schriftarten ist die Verwendung der setTypeface()-Methode von TextView. Wenn Sie sie jedoch in XML angeben möchten, müssen Sie eine benutzerdefinierte TextView erstellen und ein eigenes anpassbares Attribut für Ihre benutzerdefinierte TextView erstellen. 

Dieses Thema ist überall im Internet .

1
Alex Fu

Ich sehe keine Möglichkeit, eine externe Schriftart als XML-Attribut zu definieren. Sie sollten die Schriftart in den Assets speichern und Folgendes aufrufen:

tv.setTypeface( Typeface.createFromAsset( context.getAssets(), roboto.ttf ) );
1
Vikram Gupta