2013-03-31 13 views
16

Znalazłem kilka postów dotyczących tego tematu, ale to wszystko tematy albo ustawia czcionkę z setTypeFace() sposobu na TextView obiektu lub stworzenie niestandardowej klasy, które ustawia czcionkę Roboto i extendsTextView. Z tego co wiem z API-Level 11 (?) Lub czegoś takiego, jesteśmy w stanie ustawić TypeFace jako atrybut xml, niektóre jak. W ten sposób:Ustawianie czcionki Roboto w TextView - xml

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

Jaki jest właściwy sposób na zrobienie tego? Czy to możliwe, aby mieć zapasowe czy aplikacja zostanie uruchomiona na urządzeniu niższym niż poziom API 11 czegoś podobnego (?):

android:typeface="roboto|monospace|serif" 
+0

Nie sądzę, że istnieją sposoby na ustawienie czcionek w Android TextView z XML innych niż domyślne. – Milan

Odpowiedz

6

Spójrz na projekcie RobotoTextView. Działa na Androida 1.5 i możesz ustawić krój przy użyciu atrybutów XML. Obejmuje również inne widoki, takie jak RobotoButton, RobotoCheckbox itp.

1

nie widzę sposób można zdefiniować krój zewnętrznego jako atrybut XML. Należy przechowywać krojem w aktywach i zadzwonić:

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

Nie można ustawić czcionki bezpośrednio z aktywów jak to trzeba zrobić jak postępować w onCreate. To zrobi to samo, co chcesz zrobić.

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

nadzieję, że pomoże Ci out.:D

1

Atrybut android:typeface ma tylko kilka prawidłowych opcji (zgodnie z Androidem docs) ...

  • normalne
  • sans
  • serif
  • monospace

Jeśli potrzebujesz czcionki Roboto w swojej aplikacji dla starszych urządzeń, musisz dodać pliki Roboto TTF do swojego projektu.

Najbardziej oczywistym sposobem korzystania z tych czcionek jest użycie metody TextView w wersji setTypeface(), ale jeśli chcesz określić ją w XML, musisz utworzyć niestandardowy widok tekstowy i utworzyć własny stylowy atrybut niestandardowego TextView.

This topic is all over the Internet.

1

Dla JellyBean (4.1) można korzystać z metody podanej w this StackOverflow topic. Z przyjemnością zrezygnuje ze sań w starszych urządzeniach. Jeśli musisz zmienić stan na monochromatyczny lub szeryfowy, zadeklaruj układ folderów-v16, w którym używasz wybranej czcionki, np. "Sans-serif-condensed", aw domyślnym folderze używaj czcionki "monospace" lub "serif" . Jeśli chcesz Przenieś się na inną niż domyślna czcionka, można programowo sprawdzić wersję androida i wybrać odpowiednie działanie, tj .:

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

To jest dla przyszłych ludzi, którzy biegają w tym samym numerze, co ja. Ustawienie kroju zwykle zajmuje dużo pamięci, jeśli chodzi o ładowanie wielu wierszy. Używanie dwóch poniższych kodów w celu sprawnego działania. Dostałem rozwiązanie od stackoverflow, ale odpowiedzi nie zostały wymienione razem.

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; 
} 
} 
Powiązane problemy