我创建了一个自定义textview来设置自定义字体并为整个应用程序设置html文本。因为我的应用程序在很多地方都有这两个功能。在这种情况下,我可以将自定义字体设置为整个Android应用程序,它工作得很好。但未能将html文本应用于自定义textview。
我有限制:
setText(Html.fromHtml("Some text"))
。当我在代码中使用它时它正在工作但我想使用strings.xml
中的文本作为<string name="my_app"><![CDATA[My Whole <b>app</b>lication]]></string>
我的自定义课程:
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
public void setTypeface(Typeface tf) {
// TODO Auto-generated method stub
super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/gothic.ttf"));
}
}
我的布局文件:
<com.views.CustomTextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/my_app" />
我得到的输出为:我的应用程序
我希望输出为:我的 app lication
app以粗体显示
有没有办法实现这个目标?
答案 0 :(得分:1)
您是否考虑过使用SpannbleString? How can I use TypefaceSpan or StyleSpan with a custom Typeface?
Here是您可以在SpannableString上应用的不同跨度。
public void setSpan(){
Spannable spantext = new SpannableString("My application");
spantext.setSpan(new StyleSpan(Typeface.BOLD), 3//Start of span, 6//End of span, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Typeface HelveticaNeueBoldItalic = Typeface.createFromAsset(getActivity().getAssets(), "fonts/HelveticaNeueBoldItalic.ttf");
spantext.setSpan(new CustomTypefaceSpan("", HelveticaNeueBoldItalic ), 0, text.lenght(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView text;
text.setText(spantext);
}
public class CustomTypefaceSpan extends TypefaceSpan {
private final Typeface newType;
public CustomTypefaceSpan(String family, Typeface type) {
super(family);
newType = type;
}
@Override
public void updateDrawState(TextPaint ds) {
applyCustomTypeFace(ds, newType);
}
@Override
public void updateMeasureState(TextPaint paint) {
applyCustomTypeFace(paint, newType);
}
private static void applyCustomTypeFace(Paint paint, Typeface tf) {
int oldStyle;
Typeface old = paint.getTypeface();
if (old == null) {
oldStyle = 0;
} else {
oldStyle = old.getStyle();
}
int fake = oldStyle & ~tf.getStyle();
if ((fake & Typeface.BOLD) != 0) {
paint.setFakeBoldText(true);
}
if ((fake & Typeface.ITALIC) != 0) {
paint.setTextSkewX(-0.25f);
}
paint.setTypeface(tf);
}
}