如何设置android listview的自定义字体?

我是android的新手,并使用listview的自定义字体。我不知道如何在列表视图中使用字体。我也试过不同的例子,但无法解决我的问题。这是我的代码

public class HomeScreen extends ListActivity { private static final int QUICK_START_INDEX =0; private static final int CUSTOM = 1; private static final int CALL_LIST = 2; private static final int CALENDAR = 3; private static final int TEMPLATES=4; private static final int USER_GUIDE = 5; static final String[] LIST = new String[] { "QuickStart", "Custom", "CallList", "Calendar","Templates","UserGuide"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(new MobileArrayAdapter(this, LIST)); /*Typeface font = Typeface.createFromAsset(getAssets(), "earthkid.ttf"); */ } @Override protected void onListItemClick(ListView l, View v, int position, long id) { //get selected items String selectedValue = (String) getListAdapter().getItem(position); /*Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show();*/ if(position==QUICK_START_INDEX){ startActivity(new Intent(HomeScreen.this,ConfDialer.class)); } } } 

MobileArrayAdapter.java

 public class MobileArrayAdapter extends ArrayAdapter { private final Context context; private final String[] values; public MobileArrayAdapter(Context context, String[] values) { super(context, R.layout.list_home, values); this.context = context; this.values = values; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.list_home, parent, false); TextView textView = (TextView) rowView.findViewById(R.id.label); ImageView imageView = (ImageView) rowView.findViewById(R.id.logo); textView.setText(values[position]); // Change icon based on name String s = values[position]; System.out.println(s); if (s.equals("QuickStart")) { imageView.setImageResource(R.drawable.quick_strat); } else if (s.equals("Custom")) { imageView.setImageResource(R.drawable.customize); } else if (s.equals("CallList")) { imageView.setImageResource(R.drawable.call_list); } else if(s.equals("Calendar")){ imageView.setImageResource(R.drawable.calendar); } else if(s.equals("Templates")){ imageView.setImageResource(R.drawable.templates); } else{ imageView.setImageResource(R.drawable.user_guide); } return rowView; } } 

任何人都可以为此提供解决方案。

尝试这个…

在Activity中创建适配器时,可以覆盖getView(),例如具有名称标题的SimpleAdapter。

 //global declaration ListAdapter adapter; adapter = SimpleAdapter(getActivity(), your_list, R.layout.your_list_items, new String[]{"Name", "Title"}, new int[]{R.id.name, R.id.title}){ @Override public View getView(int position, View convertView, ViewGroup parent) { v = convertView; if(v == null){ LayoutInflater li = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = li.inflate(R.layout.interview_list_items, null); TextView titleText= (TextView) v.findViewById(R.id.title); TextView nameText= (TextView) v.findViewById(R.id.name); childFont = Typeface.createFromAsset(getActivity().getAssets(),"fonts/Roboto-Light.ttf"); titleText.setTypeface(childFont); nameText.setTypeface(childFont); return super.getView(position, v, parent); } }; 

或者在Adapter类中尝试这样…

 public class MobileArrayAdapter extends ArrayAdapter { private final Context context; private final String[] values; private Typeface tf; public MobileArrayAdapter(Context context, String[] values) { super(context, R.layout.list_home, values); this.context = context; this.values = values; this.tf = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Light.ttf"); //initialize typeface here. } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.list_home, parent, false); TextView textView = (TextView) rowView.findViewById(R.id.label); ImageView imageView = (ImageView) rowView.findViewById(R.id.logo); textView.setTypeface(tf); // set typeface here textView.setText(values[position]); // Change icon based on name String s = values[position]; System.out.println(s); if (s.equals("QuickStart")) { imageView.setImageResource(R.drawable.quick_strat); } else if (s.equals("Custom")) { imageView.setImageResource(R.drawable.customize); } else if (s.equals("CallList")) { imageView.setImageResource(R.drawable.call_list); } else if(s.equals("Calendar")){ imageView.setImageResource(R.drawable.calendar); } else if(s.equals("Templates")){ imageView.setImageResource(R.drawable.templates); } else{ imageView.setImageResource(R.drawable.user_guide); } return rowView; } 

}

app目录结构

在此处输入图像描述

使用此代码

在您的MobileArrayAdapter中

 class MobileArrayAdapter extends ArrayAdapter{ Typeface tf; public MobileArrayAdapter(Context context, String[] values,String FONT) { tf = Typeface.createFromAsset(context.getAssets(), FONT); } 

从您调用适配器的位置

 listAdapter = new MobileArrayAdapter(this, R.layout.custom_list_text, R.array.arrayName, "name_of_font.ttf"); 

你只需要改变这个布局中的字体“ R.layout.list_home ”。 因为list_home是作为单行工作的布局。 因此,如果您更改它,它也会影响listview的颜色/文本/样式。

将自定义字体文件.ttf放在assets文件夹中,并使用以下代码更改字体

 text.setTypeface(Typeface.createFromAsset(getAssets(), "/*path to your font file */")); 

路径将是资产的路径。 如果file在assets文件夹中,则仅使用带扩展名的文件名。

喜欢

  text.setTypeface(Typeface.createFromAsset(getAssets(), "arial.ttf")); 

使用

 setTypeface(Typeface) 

在Textview对象中。

这是我的自定义适配器如何调用以及在我的调用活动中给出了哪些参数。

 public class CustomData extends ArrayAdapter { Context context; int layoutResourceId; CharSequence data[] = null; Typeface tf; public CustomData(Context context, int layoutResourceId, CharSequence[] data, String FONT) { super(context, layoutResourceId, data); this.layoutResourceId = layoutResourceId; this.context = context; this.data = data; tf = Typeface.createFromAsset(context.getAssets(), FONT); } }