2013-01-31 41 views
19

Tôi có một ứng dụng có cấp API tối thiểu là 14. Tôi có đúng khi nghĩ rằng tất cả các thiết bị tương thích phải cài đặt phông chữ Roboto như mặc định? Nếu tôi đặt một phông chữ textView thành Roboto hoặc Roboto Light, nó có vẻ mặc định với kiểu chữ sans bình thường.Sử dụng phông chữ Roboto trong ứng dụng với mức API tối thiểu 14

Có cách nào để sử dụng Roboto mà không bao gồm phông chữ Roboto làm nội dung không?

+0

tôi nghĩ rằng chúng ta không thể làm Điều này –

+1

Tại sao bạn không thêm .ttf vào tài sản của bạn và sử dụng nó như là một 'TypeFace'? (Nếu tôi hiểu câu hỏi của bạn một cách chính xác) –

+0

Tôi không muốn bao gồm phông chữ Roboto làm nội dung vì ứng dụng của tôi có cấp API tối thiểu là 14, vì vậy Roboto phải có trên các thiết bị tương thích. – Milo

Trả lời

57

Có cách nào để sử dụng Roboto mà không bao gồm phông chữ Roboto làm tài sản không?

Không có cách nào khác để thực hiện việc này cho API 11 <.

Tôi thường tạo ra một TextView tùy chỉnh cho các kiểu chữ 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); 
     } 
} 

Bây giờ bạn có thể sử dụng nó trong Layouts của bạn như thế này:

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

Tất nhiên bạn có thể tạo một bố cục TextView. Một cho Pre HC, một cho HC trở lên (Bạn sẽ phải sử dụng các thư mục layout và layout-v11). Bây giờ bạn có thể sử dụng thẻ <include> để bao gồm TextView trong Bố cục của mình. Bạn chỉ cần phải làm điều này sử dụng này sau đó:

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:

Bạn có thể sử dụng Roboto natively từ Android 4.1+ như thế này:

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

Cảm ơn Ahmad đã xóa nó một cách độc đáo. Tôi sẽ phải kiểm tra lại nhưng tôi chắc chắn bằng cách sử dụng một TextView với typface thiết lập để Roboto trong styles.xml của tôi không kết quả trong Roboto được sử dụng, thay vào đó phông chữ mặc định sans hiển thị. Ứng dụng của tôi có cấp API tối thiểu là 14 vì vậy tôi nghĩ Roboto sẽ được sử dụng? – Milo

+0

@Milo xin lỗi vì câu trả lời trễ của tôi, tôi đã chỉnh sửa câu trả lời của mình :). – Ahmad

+0

Không cần lưu trữ ngữ cảnh trong một biến cá thể mContext vì có getContext được thừa hưởng(). Và tại sao bạn ghi đè setTypeface (...) khi bạn chỉ cần gọi một siêu? –

Các vấn đề liên quan