2013-01-31 8 views
19

Mam aplikację, której minimalny poziom API to 14. Czy mam rację, że wszystkie kompatybilne urządzenia powinny mieć domyślnie zainstalowaną czcionkę Roboto? Jeśli ustawię czcionkę tekstView do Roboto lub Roboto Light, domyślnie będzie to wyglądało na normalny krój czcionki.Użyj czcionki Roboto w aplikacji o minimalnym poziomie interfejsu API 14

Czy istnieje sposób na użycie Roboto bez uwzględnienia czcionki Roboto jako składnika aktywów?

+0

myślę, że nie możemy zrobić to –

+1

Dlaczego nie dodajesz .ttf do swojego zasobu i używasz go jako 'TypeFace'? (Jeśli dobrze rozumiem twoje pytanie) –

+0

Nie chcę dodawać czcionki Roboto jako zasobu, ponieważ moja aplikacja ma minimalny poziom API wynoszący 14, więc Roboto powinien już być na zgodnych urządzeniach. – Milo

Odpowiedz

57

Czy istnieje sposób użycia Roboto bez uwzględnienia czcionki Roboto jako zasobu ?

Nie ma innego sposobu na zrobienie tego dla API 11 <.

zwykle utworzyć niestandardową TextView dla czcionki Robot:

public class TextView_Roboto extends TextView { 

     public TextView_Roboto(Context context, AttributeSet attrs, int defStyle) { 
       super(context, attrs, defStyle); 
       createFont(); 
     } 

     public TextView_Roboto(Context context, AttributeSet attrs) { 
       super(context, attrs); 
       createFont(); 
     } 

     public TextView_Roboto(Context context) { 
       super(context); 
       createFont(); 
     } 

     public void createFont() { 
       Typeface font = Typeface.createFromAsset(getContext().getAssets(), "robo_font.ttf"); 
       setTypeface(font); 
     } 
} 

Teraz można go używać w układach tak:

<com.my.package.TextView_Roboto> 
    android:layout_width="..." 
    android:layout_height="..." 
    [...] 
</com.my.package.TextView_Roboto> 

Oczywiście można stworzyć układ TextView. Jeden dla Pre HC, jeden dla HC i powyżej (Będziesz musiał skorzystać z folderów układu i layoutu-v11). Teraz możesz użyć znacznika <include>, aby dołączyć TextView do swojego Układu. Po prostu trzeba robić to zastosowanie to wtedy:

if (android.os.Build.VERSION.SDK_INT >= 11){ 
    TextView txt = (TextView) findViewById(R.id.myTxtView); 
} 
else{ 
    TextView_Roboto txt = (TextView_Roboto) findViewById(R.id.myTxtView); 
} 

Edit:

Można użyć ROBOTO natywnie z Androidem 4.1+ tak:

android:fontFamily="sans-serif"   // roboto regular 
android:fontFamily="sans-serif-light"  // roboto light 
android:fontFamily="sans-serif-condensed" // roboto condensed 
+0

Dzięki Ahmad, że ładnie to czyści. Będę musiał dwukrotnie sprawdzić, ale jestem pewien, używając TextView z typface ustawionym na Roboto w moich stylach. Xml nie powoduje użycia Roboto, zamiast domyślnych czcionek sans. Moja aplikacja ma minimalny poziom API wynoszący 14, więc pomyślałem, że Roboto zostanie użyty? – Milo

+0

@Milo przepraszam za spóźnioną odpowiedź, zredagowałem moją odpowiedź :). – Ahmad

+0

Nie ma potrzeby przechowywania kontekstu w zmiennej instancji mContext, ponieważ istnieje dziedziczona metoda getContext(). I dlaczego przesłoniłeś setTypeface (...), gdy dzwonisz po prostu super? –

Powiązane problemy