android中listvliew中的自定义字体Text-View

Posted

技术标签:

【中文标题】android中listvliew中的自定义字体Text-View【英文标题】:Custom font Text-View in listvliew in android 【发布时间】:2016-12-08 16:05:12 【问题描述】:

嗨朋友们,我想在我的列表视图中使用自定义字体,我为此使用了自定义适配器,但它不起作用。任何人都可以帮助我。

     
        convertView = inflater.inflate(R.layout.listitem_row, null);
        holder = new ViewHolder();
        holder.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1);

        Typeface customfont = f1.showf();
        holder.txtViewTitle.setTypeface(customfont);
        holder.txtViewDescription = (TextView) convertView.findViewById(R.id.textView2);
        convertView.setTag(holder);
    

f1.show 代码:-

    public Typeface showf()
                 
         final AssetManager assets = this.getAssets();
         final Typeface tvFont = Typeface.createFromAsset(assets, "Monlam Uni OuChan2.ttf");

         return tvFont;
    

【问题讨论】:

显示您的持有人班级? 【参考方案1】:

确保文件名中包含空格这一事实不会妨碍程序正确识别文件。

【讨论】:

【参考方案2】:

尝试改变/重构

Monlam Uni OuChan2.ttf

monlam_uni_ouchan2.ttf

【讨论】:

【参考方案3】:

您可以在 CustomListAdapter 类中使用它

private class CustomListAdapter extends ArrayAdapter 

private Context mContext;
private int id;
private List <String>items ;

public CustomListAdapter(Context context, int textViewResourceId , List<String> list ) 

    super(context, textViewResourceId, list);           
    mContext = context;
    id = textViewResourceId;
    items = list ;


@Override
public View getView(int position, View v, ViewGroup parent)

    View mView = v ;
    if(mView == null)
        LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mView = vi.inflate(id, null);
    

    TextView text = (TextView) mView.findViewById(R.id.textView);

    if(items.get(position) != null )
    
        text.setTextColor(Color.BLUE);
        text.setText(items.get(position));
        text.setBackgroundColor(Color.RED); 
        int color = Color.argb( 200, 255, 64, 64 );
            text.setBackgroundColor( color );

    

    return mView;

还有Custom_xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<TextView  
 android:layout_ 
 android:layout_ 
 android:id="@+id/textView"
 android:textSize="20px" 
 android:paddingTop="10dip"       
 android:paddingBottom="10dip"/>
</LinearLayout>

【讨论】:

【参考方案4】:

您能否添加更多详细信息和更多日志记录?

还要确保您的文件位于 Assets 文件夹中。不要只是自己添加,使用 File>New>Folder>Assets Folder 如下图所示。正如亚当指出的那样,您也可以尝试转义空格字符。

【讨论】:

【参考方案5】:

自定义字体类

public class CustomTextView extends TextView 

    public CustomTextView (Context context) 
        super(context);

        applyCustomFont(context);
    

    public CustomTextView (Context context, AttributeSet attrs) 
        super(context, attrs);

        applyCustomFont(context);
    

    public CustomTextView (Context context, AttributeSet attrs, int defStyle) 
        super(context, attrs, defStyle);

        applyCustomFont(context);
    

    private void applyCustomFont(Context context) 
        Typeface customFont = FontCache.getTypeface("SourceSansPro-Regular.ttf", context);
        setTypeface(customFont);
    

list_item_xml

<RelativeLayout
    android:id="@+id/itemContainer"
    android:layout_
    android:layout_>

    <com.you.package.views.CustomTextView
        android:id="@+id/name"
        android:layout_
        android:layout_
        android:textColor="@color/green_dark"
        android:textSize="20sp"
        android:text="Sample text"
        android:layout_marginBottom="24dp"/>

</RelativeLayout>

在您的适配器视图支架中

 public static class ViewHolder extends RecyclerView.ViewHolder
        private RelativeLayout itemContainer;
        private final CustomTextView itemActName;
        public ViewHolder(View v) 
            super(v);
            itemContainer = (RelativeLayout) v.findViewById(R.id.itemContainer);
            itemActName = (CustomTextView) v.findViewById(R.id.name);
        
    

 @Override
    public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_item_xml, parent, false);

        return new ViewHolder(v);
    



    @Override
    public void onBindViewHolder(CustomAdapter.ViewHolder holder, final int position) 

        holder.itemActName.setText(List.get(position).getText());
        holder.itemContainer.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 

                if (mItemClickListener != null) 
                    mItemClickListener.onItemClick(v, position);
                
            
        );
    

【讨论】:

【参考方案6】:

你把字体放在哪里了?我可以看到文件名包含白色空白,这可能会给您带来问题。 我有另一种方法让你做到这一点。 创建一个自定义 TextView 类,如下所示:

public class MyTextView extends TextView 

    public MyTextView(Context context, AttributeSet attrs, int defStyle) 
        super(context, attrs, defStyle);
        init();
    

    public MyTextView(Context context, AttributeSet attrs) 
        super(context, attrs);
        init();
    

    public MyTextView(Context context) 
        super(context);
        init();
    

    private void init() 
        if (!isInEditMode()) 
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/MavenPro-Regular.ttf"); // make sure your font is put on assets/font location.
            setTypeface(tf);
        
    

然后从 XML 中使用它,例如:

<yourPackageName.MyTextView
            android:layout_
            android:layout_
            android:textSize="12dp"
            android:text="REGULAR"
            android:textColor="#868688"/>

【讨论】:

【参考方案7】:

当视图为null 时,不要一次又一次地添加字体getView() 中只添加一次。

首先在assest文件夹中添加字体,如图所示。

这个层次结构将成为路径“assets/fonts/bohema.otf”

    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) 
        View row = convertView;
        ViewHolder holder;

        if (convertView == null) 
            row = inflater.inflate(R.layout.font_lv_item, null);

            holder = new ViewHolder();
            holder.title = (TextView) row.findViewById(R.id.font_title_txt);
            Typeface tf = Typeface.createFromAsset(mContext.getAssets(), "fonts/bohema.otf");
            holder.title.setTypeface(tf );

            row.setTag(holder);
         else 
            holder = (ViewHolder) row.getTag();
        

        Fonts item = data.get(position);
        holder.title.setText(item.getTile());
        holder.title.setTypeface(item.getTf());

        return row;
    

【讨论】:

【参考方案8】:

移动这一行 Typeface customfont = f1.showf();当 convertView 为空时,到适配器的构造函数并在 ui 组件中仅设置一次字体。希望它会奏效。

:)GlbMP

【讨论】:

【参考方案9】:

试试这个代码:

    Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/abc.ttf");
    textView.setTypeface(tf);

你需要把活动的上下文放在getAssets()之前

我的意思不是这个:

      final AssetManager assets = this.getAssets();

使用

      Context context;
      final AssetManager assets = context.getAssets();

【讨论】:

以上是关于android中listvliew中的自定义字体Text-View的主要内容,如果未能解决你的问题,请参考以下文章

Android 中的自定义字体在不同 API 中的呈现方式不同

Android API中的自定义字体低于16?

Xamarin 表单:UWP 和 Windows 8.1 中的自定义字体

如何更改 Android 菜单项的自定义字体?

Google Colaboratory matplotlib 图表中的自定义字体

批处理文件中的自定义字体[关闭]