我正在做以下事情。我得到的只是基本字体,而不是我的自定义符号字体。
有什么想法吗?
Paint pnt = new Paint();
// SymbolNo is 38. Returns string "&" which is correct in normal font.
String symbolText = Character.toString((char)SymbolNo);
// Should adopt a symbol font and draw symbol to screen instead. But I just see "&"
Typeface tf = Typeface.createFromAsset(m_context.getAssets(), "fonts/myFont.TTF" );
pnt.setTypeface(tf);
m_canvas.drawText(symbolText,x, y, pnt);
我的字体位于assets/fonts/myFont.TTF
答案 0 :(得分:1)
并非所有字体都适用于Android。它只是默默地失败。
一个行动方案是找到一个绝对处理自定义字体的应用程序 - 例如this sample app of mine - 作为实验的基础。您可以运行该应用程序以确认其字体出现,然后用您的字体替换其中一个。如果这样可行,那么你在字体中加载的方式就会出现问题(尽管我不知道是什么或如何)。如果字体无法在我的示例应用程序中工作,该应用程序附带的字体确实有效,则问题在于字体。
不幸的是,我不知道是什么使字体工作或不工作。您可以尝试在字体编辑器中打开字体,进行微小的更改(例如,删除一些您知道不需要的字形),将其保存回来,并查看修改后的字体是否有效。如果确实如此,那意味着无论最初保存的字体是否包含Android不喜欢的内容,而且您的字体编辑器可以生成Android友好的字体。
答案 1 :(得分:-3)
你好,我有一个解决方案,你可以尝试以这种方式使用字体......我已经在我的项目中实现了这个...
步骤:
EditText
或按钮文字例如:
public class ButtonHelveticaBold extends Button {
Context ButtonFontContext;
public ButtonHelveticaBold(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
ButtonFontContext = context;
}
public ButtonHelveticaBold(Context context, AttributeSet attrs) {
super(context, attrs);
ButtonFontContext = context;
}
public ButtonHelveticaBold(Context context) {
super(context);
ButtonFontContext = context;
}
@Override
public void setTypeface(Typeface tf, int style) {
Typeface typeFaceHelvetica;
if (style == Typeface.BOLD) {
typeFaceHelvetica = Typeface.createFromAsset(getContext().getAssets(), "fonts/helvetica_bold_neue.ttf");
} else {
typeFaceHelvetica = Typeface.createFromAsset(getContext().getAssets(), "fonts/helvetica_neue_regular.ttf");
}
super.setTypeface(typeFaceHelvetica);
}
}
3:在XML中使用它就像这样:
<com.fontUtils.fonts.ButtonHelveticaBold
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>