從一個應用程序,我發展的需要,我已經收到了,有許多文件,如FONTNAME正規,FONTNAME粗體,FONTNAME,它特定字體。我需要在應用程序的所有文字視圖中使用它。首先,我認爲這是一件容易的事。查看SO,發現了一個非常漂亮的主題:here自定義字體和自定義的TextView在Android
所以首先我不喜歡:
public static void overrideFonts(final Context context, final View v) {
try {
if (v instanceof ViewGroup) {
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
View child = vg.getChildAt(i);
overrideFonts(context, child);
}
} else if (v instanceof TextView) {
((TextView)v).setTypeface(FONT_REGULAR);
}
} catch (Exception e) {
e.printStackTrace();
// ignore
}
}
而且叫我活動的onCreate期間此方法。我的應用程序中的每個textView都顯示該字體和男孩,我很高興能夠輕鬆離開。直到我進入一個需要一些文字瀏覽的屏幕Bold as Style
(android:textStyle="bold"
)。然後我意識到這個解決方案不能爲我提供從資產中加載Font-Bold .ttf的可能性。
不是進一步望去,只見一個漂亮的自定義TextView的實施,在相同的SO問題:
public class MyTextView extends TextView {
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyTextView(Context context) {
super(context);
init();
}
public void init() {
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/chiller.ttf");
setTypeface(tf ,1);
}
}
這看起來甚至更好。我的問題是:如何在init()
上檢測我的控件是否將樣式設置爲粗體,以便我可以分配請求的類型?
謝謝你的時間。
LE。
public class MyTextView extends TextView {
Typeface normalTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_REGULAR);
Typeface boldTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_BOLD);
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyTextView(Context context) {
super(context);
}
public void setTypeface(Typeface tf, int style) {
if (style == Typeface.BOLD) {
super.setTypeface(boldTypeface/*, -1*/);
} else {
super.setTypeface(normalTypeface/*, -1*/);
}
}
}
那麼如果我調試,應用程序進去setTypeFace,它似乎適用大膽的一個,但在我的佈局,我看不到任何變化:按照下面的例子,因爲我已經更新了我的班,不粗體。無論使用什麼字體,我的TextView都不會做任何更改,並且會使用默認的android字體進行顯示。我想知道爲什麼 ?
我已經在博客文章here on my blog上總結了一切,也許它會幫助別人。
謝謝爲詳細的問題和闡述,以及偉大的博客文章!爲我完美工作。我也爲同樣的結果分類了Button。我唯一的問題是w.r.t.調用createFromAsset()_every_時間的效率。將字體加載一次並將它們存儲在Application類中,並從MyTextView.setTypeface()訪問這些字體會更好嗎? –
謝謝你的話。我也想過,但沒有測試看它是如何工作的。它應該工作正常。無論如何,我還沒有看到在屏幕上有許多意見的任何懲罰。 – Alin