Ich habe eine benutzerdefinierte TextView
und ich bekomme alle meine Text von meinem Server, so dass ich nie wissen, welcher Stil kommt. Zum Beispiel kann dies bold
, italic
und mehr Textstyles
enthalten. Aber ich bin mir nicht sicher, wie ich das zur Laufzeit handhaben soll.Ändern Schriftarten zur Laufzeit für Textview
Ich habe einen assets
Ordner mit allen meinen Schriften i verwenden möchte:
Und in meinem CustomTextView:
public class CustomTextView extends TextView {
private static final String ANDROID_SCHEMA = "http://schemas.android.com/apk/res/android";
public CustomTextView(Context context) {
super(context);
applyCustomFont(context, null);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
applyCustomFont(context, attrs);
}
public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
applyCustomFont(context, attrs);
}
private void applyCustomFont(Context context, AttributeSet attrs) {
//Workaround for Preview Mode
if (!isInEditMode()) {
int textStyle = attrs.getAttributeIntValue(ANDROID_SCHEMA, "textStyle", Typeface.NORMAL);
Typeface customFont = selectTypeface(context, textStyle);
setTypeface(customFont);
} else {
this.setTypeface(null, Typeface.NORMAL);
}
}
private Typeface selectTypeface(Context context, int textStyle) {
switch (textStyle) {
case Typeface.BOLD: // bold
return FontCache.getTypeface("fonts/OpenSans-Bold.ttf", context);
case Typeface.ITALIC: // italic
return FontCache.getTypeface("fonts/OpenSans-Italic.ttf", context);
default:
return FontCache.getTypeface("fonts/OpenSans-Regular.ttf", context);
}
}
}
Das ist meine Fontcache-Klasse :
public class FontCache {
//This caches the fonts while minimizing the number of accesses to the assets
private static final HashMap<String, Typeface> fontCache = new HashMap<>();
public static Typeface getTypeface(String fontname, Context context)
{
Typeface typeface = fontCache.get(fontname);
if (typeface == null)
{
try {
typeface = Typeface.createFromAsset(context.getAssets(), fontname);
} catch (Exception e) {
return null;
}
fontCache.put(fontname, typeface);
}
return typeface;
}
}
Aber t Hüte nicht wie es funktioniert, irgendwelche Ideen, wie man das erreicht? Vielen Dank!
was 'FontCache' ist anrufen können? – Blackbelt
Danke, ich habe es hinzugefügt! – Davis
das sieht gut aus. Was ist das Problem ? – Blackbelt