可能重複:
Is it possible to set font for entire Application?Android的 - 如何設置自定義字體爲整個應用程序
我需要設置一個自定義的字體(.ttf格式)整個應用程序,怎麼能我做到了嗎? 從清單或XML將是最好的選擇,如果有可能
可能重複:
Is it possible to set font for entire Application?Android的 - 如何設置自定義字體爲整個應用程序
我需要設置一個自定義的字體(.ttf格式)整個應用程序,怎麼能我做到了嗎? 從清單或XML將是最好的選擇,如果有可能
編輯2014年9月:
對於任何人仍然看到這個老可怕的答案,真正的好答案就在這裏:
https://stackoverflow.com/a/16883281/1154026
OLD:
您最好的選擇是這樣的:
所以
TextView text = (TextView) findViewById(R.id.custom_font);
Typeface font = Typeface.createFromAsset(getAssets(), "yourfont.ttf");
text.setTypeface(font);
有了您的.ttf在「資產」文件夾的根目錄中。
這個作品很好,但如果我有一個ListView如何更改該行的字體?我想可以通過XML來完成 –
這個解決方案似乎不再適用於Android 5.0 任何其他選項? –
@AndreaMarioLufino在你的適配器中設置這個字體到你得到的所有textViews都可以工作。假設你有'textview1,textview2'和'textView3',那麼你應該只對它們使用setTypface(yourfont)。希望能幫助到你。 – Recomer
TextView tv=(TextView)findViewById(R.id.custom);
Typeface face=Typeface.createFromAsset(getAssets(),
"fonts/Verdana.ttf");
tv.setTypeface(face);
把字體文件在/ RES fonts文件夾/
就像我的回答如果是有幫助...
創造學習一個TextView子類,在任何地方使用它
public class RobotoTextView extends TextView {
public RobotoTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public RobotoTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public RobotoTextView(Context context) {
super(context);
init();
}
private void init() {
if (!isInEditMode()) {
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Light.ttf");
setTypeface(tf);
}
}
}
使用
<com.test.RobotoTextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
在Java代碼中,你可以將它轉換到TextView的
可以擴展的TextView的建議here,並設置你的字體,然後在整個應用程序中使用它。
你可以這樣做。 創建自定義的TextView和使用,一處處
public class MyTextView extends android.widget.TextView
{
public MyTextView(Context context)
{
this(context, null);
}
public MyTextView(Context context, AttributeSet attrs)
{
this(context, attrs, 0);
}
public MyTextView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs);
if (this.isInEditMode()) return ;
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SomeStyle);
final String customFont = a.getString(R.styleable.SomeStyle_font);
//Build a custom typeface-cache here!
this.setTypeface(
Typeface.createFromAsset(context.getAssets(), customFont)
);
}
}
添加這attrs.xml
<declare-styleable name="SomeStyle">
<attr name="font" format="string" />
</declare-styleable>
然後在你的主題,做到這一點: 這將確保所有的textviews將使用樣式MyTextView
<item name="android:textViewStyle">@style/MyTextView</item>
現在我們可以使用這種風格的自定義屬性來定義您的自定義字體。
<style name="MyTextView" parent="@android:style/Widget.TextView">
<item name="font">MyPathToFontInAssets.ttf</item>
</style>
因此,無論何時在項目中使用MyTextView,它都將具有您的自定義字體。
重要:字樣都沒有緩存,所以如果你打算使用此代碼,你也應該建立一個自定義的字體緩存,所以你可以重新使用自定義字體爲所有textviews。這將顯着加速應用程序!
更新:正如Amir所說,這幾乎與Custom fonts and XML layouts (Android)一樣,但我也使用android樣式自動在應用程序的所有文本視圖中使用它。
嗨!它顯示錯誤在這行'
我通過添加'type =「string」來清除錯誤'' – DroidLearner
_字體不會被緩存,所以如果您打算使用此代碼,您還應該構建自定義字體緩存_如何構建緩存? – DroidLearner
僅僅因爲它被標記爲重複,不能提供更好的答案:使用書法庫來實現這一點。它甚至改變吐司的字體。 – suku
查看此tut http://www.gadgetsaint.com/android/custom-fonts-textview-edittext-android/#.WNive2996Hs – ASP
難道你只是使用https://github.com/chrisjenx/Calligraphy – Fattie