我是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<String> {
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;
}
}
任何人都可以为此提供解决方案。
答案 0 :(得分:4)
试试这个......
您可以在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<String> {
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目录结构
答案 1 :(得分:1)
使用此代码
在 MobileArrayAdapter
中class MobileArrayAdapter extends ArrayAdapter<CharSequence>{
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");
答案 2 :(得分:1)
您只需更改此布局中的字体“R.layout.list_home
”即可。因为list_home
是作为单行工作的布局。因此,如果您更改它,它也会影响listview
的颜色/文本/样式。
答案 3 :(得分:1)
将自定义字体文件.ttf
放入assets
文件夹并使用以下代码更改字体
text.setTypeface(Typeface.createFromAsset(getAssets(), "/*path to your font file */"));
路径将是资产中的路径。如果file在assets文件夹中,则仅使用带扩展名的文件名。
像
text.setTypeface(Typeface.createFromAsset(getAssets(), "arial.ttf"));
答案 4 :(得分:0)
使用
setTypeface(Typeface)
Textview对象中的。
答案 5 :(得分:0)
这是我的自定义适配器如何调用以及在我的调用活动中给出了哪些参数。
public class CustomData extends ArrayAdapter<CharSequence>
{
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);
}
}
答案 6 :(得分:0)
我在Adapter类中使用此代码,它可以正常工作:
public class MyAdapter extends BaseAdapter {
private Context context;
private ArrayList<Item> item;
public MyAdapter(Context context, ArrayList<Item> item) {
this.context = context;
this.item = item;
}
@Override
public int getCount() {
return item.size();
}
@Override
public Object getItem(int i) {
return item.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.list_header, viewGroup, false);
}
Typeface MyFont= Typeface.createFromAsset(context.getAssets(), "Arial.ttf");
TextView txtTitle = view.findViewById(R.id.txtTitle);
txtTitle.setTypeface(MyFont);
}
}