Android 中的自定义字体在运行时不起作用
Custom font not working at runtime in Android
我制作了一个自定义 TextView 来加载字体(在我的例子中是 IcoMoon 字体)。我的自定义 TextView class 如下所示:
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context);
init(context);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
@SuppressWarnings("NewApi")
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context);
}
/**
* Load and apply font for this widget
*
* @param context to initialize
*/
private void init(Context context) {
Typeface font = Typeface.createFromAsset(context.getAssets(), "icomoon.ttf");
if(font != null)
setTypeface(font);
}
}
在我的布局文件中,我使用了这个 class 如下:
<com.test.CustomTextView
android:id="@+id/txt_about_hotel_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/textColorPrimary" />
当我在布局中使用此 class 并将文本设置为显示字体图标时,一切顺利。现在,当我尝试在 Activity class 中使用此 class 来设置字体图标时,问题就出现了:
CustomTextView txtHotelIcon = (CustomTextView) findViewById(R.id.txt_about_hotel_icon);
txtHotelIcon.setText("");
现在的问题是,如果我在 XML 布局中设置字体字符,效果很好并且字体图标可见。但是当我尝试在 运行 时设置此字体文本值时,它显示确切的文本而不是显示字体图标。
请建议我如何解决此问题。
您应该在代码中使用其他格式
CustomTextView txtHotelIcon = (CustomTextView) findViewById(R.id.txt_about_hotel_icon);
txtHotelIcon.setText("\ue020");
据我所知 TextView
不直接支持 HTML 表示法,因此您可以尝试以下方法之一:
- 使用
setText(Html.fromHtml(""))
加载您的文本
- 将 HTML 符号替换为 Unicode
setText("\uE020")
还没有尝试过带有图标字体的那些,所以它们可能不起作用。
我制作了一个自定义 TextView 来加载字体(在我的例子中是 IcoMoon 字体)。我的自定义 TextView class 如下所示:
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context);
init(context);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
@SuppressWarnings("NewApi")
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context);
}
/**
* Load and apply font for this widget
*
* @param context to initialize
*/
private void init(Context context) {
Typeface font = Typeface.createFromAsset(context.getAssets(), "icomoon.ttf");
if(font != null)
setTypeface(font);
}
}
在我的布局文件中,我使用了这个 class 如下:
<com.test.CustomTextView
android:id="@+id/txt_about_hotel_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/textColorPrimary" />
当我在布局中使用此 class 并将文本设置为显示字体图标时,一切顺利。现在,当我尝试在 Activity class 中使用此 class 来设置字体图标时,问题就出现了:
CustomTextView txtHotelIcon = (CustomTextView) findViewById(R.id.txt_about_hotel_icon);
txtHotelIcon.setText("");
现在的问题是,如果我在 XML 布局中设置字体字符,效果很好并且字体图标可见。但是当我尝试在 运行 时设置此字体文本值时,它显示确切的文本而不是显示字体图标。
请建议我如何解决此问题。
您应该在代码中使用其他格式
CustomTextView txtHotelIcon = (CustomTextView) findViewById(R.id.txt_about_hotel_icon);
txtHotelIcon.setText("\ue020");
据我所知 TextView
不直接支持 HTML 表示法,因此您可以尝试以下方法之一:
- 使用
setText(Html.fromHtml(""))
加载您的文本
- 将 HTML 符号替换为 Unicode
setText("\uE020")
还没有尝试过带有图标字体的那些,所以它们可能不起作用。