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 中的呈现方式不同
Xamarin 表单:UWP 和 Windows 8.1 中的自定义字体