Пользовательский шрифт TextView не применяется при настройке текста из java android
Я создал пользовательский TextView для использования поддержки Font Awesome, его работа отлично работает, когда вы добавляете текст (unicode
) в layout xml. Но если я пытаюсь установить текст из моего адаптера динамически, используя view.setText()
, его не применяя шрифт.
Класс FontView
public class FontView extends TextView {
private static final String TAG = FontView.class.getSimpleName();
//Cache the font load status to improve performance
private static Typeface font;
public FontView(Context context) {
super(context);
setFont(context);
}
public FontView(Context context, AttributeSet attrs) {
super(context, attrs);
setFont(context);
}
public FontView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setFont(context);
}
private void setFont(Context context) {
// prevent exception in Android Studio / ADT interface builder
if (this.isInEditMode()) {
return;
}
//Check for font is already loaded
if(font == null) {
try {
font = Typeface.createFromAsset(context.getAssets(), "fontawesome-webfont.ttf");
Log.d(TAG, "Font awesome loaded");
} catch (RuntimeException e) {
Log.e(TAG, "Font awesome not loaded");
}
}
//Finally set the font
setTypeface(font);
}
}
XML для макета
<com.domain.app.FontView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="60sp"
android:textAlignment="center"
android:text=""
android:gravity="center"
android:id="@+id/iconView"
android:background="@drawable/oval"
android:padding="10dp"
android:layout_margin="10dp" />
Мой Адаптер
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
IconListHolder viewHolder;
if( convertView == null ) {
LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = layoutInflater.inflate(R.layout.icon, null);
viewHolder = new IconListHolder(v);
v.setTag(viewHolder);
} else {
viewHolder = (IconListHolder) v.getTag();
}
//Set the text and Icon
viewHolder.textViewIcon.setText(pages.get(position).getIcon());
viewHolder.textViewName.setText(pages.get(position).getTitle());
return v;
}
private class IconListHolder {
public FontView textViewIcon;
public TextView textViewName;
public IconListHolder(View base) {
textViewIcon = (FontView) base.findViewById(R.id.iconView);
textViewName = (TextView) base.findViewById(R.id.iconTextView);
}
}
Пожалуйста, помогите, что я делаю не так.2 ответа:
После борьбы более 3 часов. Я нашел ответ здесь. Это была проблема Юникода.
Изменение адаптера
setText()
для использованияHtml.fromHtml("").toString()
Исправлена проблемаviewHolder.textViewIcon .setText(Html.fromHtml(pages.get(position).getIcon()).toString());
Я надеюсь, что вы, ребята, найдете это полезным.
Не удалось найти ошибку в коде.
Это пользовательский textView, который я использую. Создайте папку шрифтов в папке активов
CustomText.java
import android.content.Context; import android.graphics.Typeface; import android.util.AttributeSet; import android.widget.TextView; public class CustomText extends TextView { public CustomText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(attrs); } public CustomText(Context context, AttributeSet attrs) { super(context, attrs); init(attrs); } public CustomText(Context context) { super(context); init(null); } private void init(AttributeSet attrs) { if (attrs!=null) { { Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(),"fonts/custom_font.ttf"); setTypeface(myTypeface); } } } }