2010-07-08 50 views
38

Tôi đã đọc một số bài viết và tìm kiếm trên Google, nhưng tôi đã không thực hiện được.Phông chữ tùy chỉnh trong Android

Sự cố của tôi liên quan đến phông chữ.

Trong Android, chỉ có 4 thuộc tính trong "android:typeface": Bình thường, Sans, Serif, Monospace.

Vì vậy, tôi phải làm gì để sử dụng "Verdana" trong ứng dụng của mình?

Vui lòng đề xuất cho tôi một cách chính xác để sử dụng phông chữ này trong ứng dụng Android của tôi.

+0

Kiểm tra bài đăng này: [http://stackoverflow.com/questions/2888508/how-to-change-the-font-on-the-text-view-in-android](http://stackoverflow.com/question/2888508/how-to-change-the-font-on-the-text-view-in-android) – Praveen

+0

Kiểm tra điều này cũng: http://stackoverflow.com/a/14558090/693752 – Snicolas

+0

http://stackoverflow.com/questions/9030204/how-to-use-custom-font-in-android-xml/9035924#9035924 – Vins

Trả lời

76

Đây là một ví dụ đơn giản ... tạo một thư mục trong thư mục gốc của dự án của bạn được gọi là assets/fonts/ sau đó dán tệp phông TTF (trong trường hợp này là Verdana.ttf). Sau đó, nếu bạn muốn áp dụng mà phông chữ, nói một TextView, làm như sau:

import android.graphics.Typeface; 

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/Verdana.ttf"); 

    tv.setTypeface(face); 
    } 
} 

Ví dụ này được lấy từ cuốn sách ComonsWare (được viết bởi Mark Murphy). Bạn có thể download the full example from GitHub.

+6

có cách nào để áp dụng điều này cho tất cả ứng dụng văn bản rộng hơn là lượt xem văn bản riêng lẻ không? –

+1

Bạn có thể đặt phông chữ cho điều khiển thông qua bố cục xml không? –

+0

Có và không. Bạn không thể làm điều đó ra khỏi hộp ... nhưng bạn có thể mở rộng 'TextView' để thêm chức năng như vậy. – Cristian

4

Bạn có thể sử dụng PixlUI tại https://github.com/neopixl/PixlUI

nhập .jar của họ và sử dụng nó trong XML

<com.neopixl.pixlui.components.textview.TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/hello_world" 
    pixlui:typeface="GearedSlab.ttf" /> 
+0

Tôi đã thử thư viện của bạn, nhưng có vẻ như không có tác dụng đối với android: textStyle = "bold" nếu tôi thay đổi TextView thành textView pixlui. (v 1.0.5) – mrmoment

0
// My example show you how to change fonts into a normal textView or list view 

create a fonts folder into your assets dir of android and copy your custom font in that .. 
assets/fonts/monaco.ttf 

// Font path 
String fontPath = "fonts/monaco.ttf"; 

// Loading Font Face 
Typeface tf = Typeface.createFromAsset(getAssets(), fontPath); 

// CASE 1 : Inside your list view   
holder.name = (TextView) convertView 
       .findViewById(R.id.textView_cityName); 

// set name of text in each row 
holder.name.setText(CitiesNames.get(position)); 

// set the type of font you want to set 
holder.name.setTypeface(tf); 

// CASE 2 : Inside your text view 

TextView tx = (TextView)findViewById(R.id.textview1); 
tx.setTypeface(tf); 

//vKj 
-1
TextView textView = (Textview) findViewById(R.id.mytext); 
Typeface face=Typeface.createFromAsset(getAssets(), 
             "fonts/Verdana.ttf"); 
textView.setTypeFace(face); 
+0

Tại sao bạn lại lặp lại mã/câu trả lời? –

2

Bạn có thể sử dụng thư viện EasyFonts bên thứ ba đơn giản để thiết nhiều phông chữ tùy chỉnh đến số TextView của bạn. Bằng cách sử dụng thư viện này, bạn không cần phải lo lắng về việc tải xuống và thêm phông chữ vào thư mục asset/fonts. Cũng về tạo đối tượng Typeface.

Thư viện này không cung cấp khuôn mặt Phông chữ Verdana.

Nhưng cung cấp các khuôn mặt phông chữ sau đây. Mà bạn có thể muốn sử dụng.

  • Roboto
  • Droid Serif
  • Droid Robot
  • Tự do
  • Fun Raiser
  • Android Nation
  • xanh Avocado
  • Recognition

Đơn giản chỉ cần:

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

Tôi là tác giả của thư viện này.

3

Vâng !!
Câu hỏi này là khá cũ nhưng vẫn còn nếu ai đó đang tìm kiếm câu trả lời (năm 2015) về cách áp dụng phông chữ tùy chỉnh cho tất cả các TextView qua mã xml trực tiếp xem dưới đây:

Đầu tiên:
chúng ta cần phải thêm phông chữ tùy chỉnh thư mục nội dung bên trong thư mục bên trong ứng dụng của bạn:
.ttf hoặc .otf cả công việc trong trường hợp của Android

thứ hai:
Tạo Lớp CustomTextView kéo dài TextView như dưới đây:

public class CustomTextView extends TextView { 

public CustomTextView(Context context) { 
    super(context); 
    } 

public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    } 

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

@Override 
public void setTypeface(Typeface tf) { 
    super.setTypeface(FontCache.getFont(getContext(),"fonts/<font_name>")); 
    } 
} 

Thứ ba:
FontCache lớp được sử dụng bên trong setTypeface CustomTextView của() method.Purpose là để làm Caching Font cơ bản sử dụng HashMap:

public class FontCache { 

private static Map<String,Typeface> fontMap = new HashMap<String,Typeface>(); 

public static Typeface getFont(Context context,String fontname){ 
    if(fontMap.containsKey(fontname)){ 
     return fontMap.get(fontname); 
     } 
    else{ 
     Typeface tf = Typeface.createFromAsset(context.getAssets(),fontname); 
     fontMap.put(fontname,tf); 
     return tf; 
     } 
    } 
} 

Thứ tư: [Bước cuối cùng] Tất cả những gì chúng tôi làm bây giờ là sử dụng CustomTextView trực tiếp bên trong tệp xml của chúng tôi ở bất cứ nơi nào tùy chỉnh phông chữ văn bản được yêu cầu:

<<package_name>.CustomTextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Custom Font Text" 
    android:textSize ="18sp" 
    android:textAppearance="?android:textAppearanceSmall" 
    android:id="@+id/custom_txt" 
    /> 

Xin lỗi, nếu điều này đã được đăng ở đâu đó trên SO. Chỉ cần nghĩ để chia sẻ nếu nó giúp ai đó !!

1

Để thay đổi (tùy chỉnh) phông chữ của ứng dụng của bạn trên toàn thế giới, có một cái nhìn tại Calligraphy

Chỉ cần thêm thư pháp để gradle.build của bạn và thêm đoạn mã sau để Application.onCreate() của bạn:

CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() 
         .setDefaultFontPath("fonts/MyCustomFont.ttf") 
         .setFontAttrId(R.attr.fontPath) 
         .build() 
     ); 

và trong mọi Hoạt động, hãy thêm các thông tin sau:

@Override 
protected void attachBaseContext(Context newBase) { 
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
} 

Đó là tất cả những gì bạn cần làm để thay đổi phông chữ trên toàn cầu trong ứng dụng của mình. Hãy xem tài liệu để biết thêm chi tiết.

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