Как задать шрифт в RecyclerAdapter

268
26 ноября 2016, 19:17
public class RecyclerAdapter extends RecyclerView.Adapter <RecyclerAdapter.ViewHolder>{
TextView info;
ArrayList<String> posts;
public RecyclerAdapter(ArrayList<String> posts) {
    this.posts = posts;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_child,parent,false));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.info.setText(posts.get(position));
    Linkify.addLinks(holder.info, Linkify.ALL);
}
@Override
public int getItemCount() {
    return posts.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
    TextView info;
    public ViewHolder(View itemView) {
        super(itemView);
        info = (TextView)itemView.findViewById(R.id.info_text);
    }
}

Как установить шрифт для Textview из assets/font ?

Answer 1

Довольно просто. Правда для этого будет необходимо передать Context в RecyclerAdapter в данном случае.

   @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.info.setText(posts.get(position));
        //Установка шрифта
        Typeface font = Typeface.createFromAsset(context.getAssets(), "your_font.ttf");
        holder.info.setTypeface(font);
        Linkify.addLinks(holder.info, Linkify.ALL);
    }
Answer 2

Создать класс, расширяющий TextView

public class TextViewPlus extends TextView {
private static final String TAG = "TextView";
public TextViewPlus(Context context) {
    super(context);
}
public TextViewPlus(Context context, AttributeSet attrs) {
    super(context, attrs);
    setCustomFont(context, attrs);
}
public TextViewPlus(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    setCustomFont(context, attrs);
}
private void setCustomFont(Context ctx, AttributeSet attrs) {
    TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.TextViewPlus);
    String customFont = a.getString(R.styleable.TextViewPlus_customFont);
    setCustomFont(ctx, customFont);
    a.recycle();
}
public boolean setCustomFont(Context ctx, String asset) {
    Typeface tf = null;
    try {
    tf = Typeface.createFromAsset(ctx.getAssets(), asset);  
    } catch (Exception e) {
        Log.e(TAG, "Could not get typeface: "+e.getMessage());
        return false;
    }
    setTypeface(tf);  
    return true;
}
}

attrs.xml

<resources>
<declare-styleable name="TextViewPlus">
    <attr name="customFont" format="string"/>
</declare-styleable>
</resources>

item.xml

<?Layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:foo="http://schemas.android.com/apk/res/com.example"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.example.TextViewPlus
    android:id="@+id/textViewPlus1"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:text="@string/showingOffTheNewTypeface"
    foo:customFont="saxmono.ttf">
</com.example.TextViewPlus>
</LinearLayout>
READ ALSO
Сгладить линию графика

Сгладить линию графика

Использую библиотеку XChart от knownЕсли кто то пользовался данной библиотекой подскажите, какой метод или какая константа отвечает за сглаживания...

261
Воспроизведение потокового видео Java

Воспроизведение потокового видео Java

Доброго времени сутокХочу получить потоковое видео в небольшом Java-приложении, организованное с использованием swing

628
Потокобезопасный singleton

Потокобезопасный singleton

Вот потокобезопасный singleton:

299
О выводе графики

О выводе графики

Нужна помощь в структуризации моих знаний о том как выводится графики и проблема эта появилась в момент когда я писал простенькую игрушку...

242