Android 在“ImageAdapter扩展BaseAdapter”中设置自定义字体`
我正在使用Android 在“ImageAdapter扩展BaseAdapter”中设置自定义字体`,android,gridview,fonts,adapter,Android,Gridview,Fonts,Adapter,我正在使用ImageAdapter extensed BaseAdapter为gridview充气。Gridview有两个textviews。我想为其中一个设置自定义字体。使用Typeface font=Typeface.createFromAsset(getAssets(),“BABYCAKE.TTF”)给出错误类型ImageAdapter的getAssets()方法未定义 ImageAdapter定义为 package com.amit.wozzle; import java.util.A
ImageAdapter extensed BaseAdapter
为gridview
充气。Gridview有两个textview
s。我想为其中一个设置自定义字体。使用Typeface font=Typeface.createFromAsset(getAssets(),“BABYCAKE.TTF”)ImageAdapter
中的code>给出错误类型ImageAdapter的getAssets()方法未定义
ImageAdapter
定义为
package com.amit.wozzle;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.view.LayoutInflater;
public class ImageAdapter extends BaseAdapter
{
private ArrayList<String> listCountry;
private ArrayList<String> scorestage;
private Activity activity;
Typeface font;
public ImageAdapter(Activity activity,ArrayList<String> listCountry, ArrayList<String> scorestage) {
super();
this.listCountry = listCountry;
this.scorestage = scorestage;
this.activity = activity;
font = Typeface.createFromAsset(activity.getAssets(), "BABYCAKE.TTF");
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return listCountry.size();
}
@Override
public String getItem(int position) {
// TODO Auto-generated method stub
return listCountry.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public static class ViewHolder
{
public ImageView imgViewFlag;
public TextView txtViewTitle;
public TextView txtViewTitle2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder view;
LayoutInflater inflator = activity.getLayoutInflater();
if(convertView==null)
{
view = new ViewHolder();
convertView = inflator.inflate(R.layout.grid_item, null);
view.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1);
view.txtViewTitle2.setTypeface(font);
view.txtViewTitle2 = (TextView) convertView.findViewById(R.id.textView2);
// view.imgViewFlag = (ImageView) convertView.findViewById(R.id.imageView1);
convertView.setTag(view);
}
else
{
view = (ViewHolder) convertView.getTag();
}
// view.txtViewTitle2.setBackgroundColor(Color.BLUE);
view.txtViewTitle2.setText(listCountry.get(position));
view.txtViewTitle.setText(scorestage.get(position));
// view.imgViewFlag.setImageResource(scorestage.get(position));
return convertView;
}
}
package com.amit.wozzle;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Color;
导入android.graphics.Typeface;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.GridView;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.view.LayoutInflater;
公共类ImageAdapter扩展了BaseAdapter
{
私有ArrayList列表国家;
私人ArrayList scorestage;
私人活动;
字体;
公共ImageAdapter(活动活动、ArrayList listCountry、ArrayList scorestage){
超级();
this.listCountry=listCountry;
this.scorestage=scorestage;
这个。活动=活动;
font=Typeface.createFromAsset(activity.getAssets(),“BABYCAKE.TTF”);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回listCountry.size();
}
@凌驾
公共字符串getItem(int位置){
//TODO自动生成的方法存根
返回listCountry.get(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
公共静态类视图持有者
{
公共图像视图imgViewFlag;
公共文本视图txtViewTitle;
公共文本视图txtViewTitle2;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父级){
//TODO自动生成的方法存根
视图持有者视图;
LayoutFlater充气器=活动。GetLayoutFlater();
if(convertView==null)
{
视图=新的ViewHolder();
convertView=充气机。充气(R.layout.grid_项,空);
view.txtViewTitle=(TextView)convertView.findViewById(R.id.textView1);
view.txtViewTitle2.setTypeface(字体);
view.txtViewTitle2=(TextView)convertView.findViewById(R.id.textView2);
//view.imgViewFlag=(ImageView)convertView.findViewById(R.id.imageView1);
setTag(视图);
}
其他的
{
view=(ViewHolder)convertView.getTag();
}
//view.txtViewTitle2.setBackgroundColor(Color.BLUE);
view.txtViewTitle2.setText(listCountry.get(position));
view.txtViewTitle.setText(scorestage.get(position));
//view.imgViewFlag.setImageResource(scorestage.get(position));
返回视图;
}
}
请帮忙。试试看
Typeface font = Typeface.createFromAsset(activity.getAssets(), "BABYCAKE.TTF");
为什么要在getView
中创建Typeface
对象<代码>字体
占用大量内存,而且由于在getView
中创建了大量字体对象,因此可用的内存空间会减少,因此会降低应用程序的速度
相反,字体文件应该只创建一次,并在需要时重新使用。在getView
之外创建字体文件。如果您仅在适配器内部使用它并在适配器构造函数内部初始化它,请将其声明为适配器内部的实例变量。而不是每次在getView中创建新实例,而是使用单个实例来设置字体
对于错误,请使用活动实例变量调用getAssets()
编辑-
试着像这样使用它-
class DemoFonts{
private static TypeFace typeFace;
public static TypeFace getTypeFace(Context mContext){
if(typeface==null){
typeface = Typeface.createFromAsset(mContext.getAssets(), "fonts/BABYCAKE.TTF");
}
return typeface;
}
}
试着像上面那样使用。假设您在资产文件夹中有font
文件夹。view.txtViewTitle2由于您试图在初始化之前访问textView,因此出现空指针异常。下面的更改应该可以正常工作
view.txtViewTitle2 = (TextView) convertView.findViewById(R.id.textView2)
view.txtViewTitle2.setTypeface(font);
按照你的建议做了改动。是的,现在看起来不错。另外,如果你在其他地方使用这种字体,你也可以在某个实用程序类中将它声明为静态变量,并在任何地方使用它。你能解释一下怎么做吗。我正在其他活动中使用它。我已修改我的答案,请检查。此外,如果您在资产文件夹中放置了字体文件,请在使用该文件夹名称的同时将字体文件设置为“我的代码”。demofont
将是内部类,或者是新的java类。如果它是一个新类,那么我可以在任何活动中直接使用变量字体
?我试过了,请看上面的代码。在view.txtViewTitle2.setTypeface(字体)行获取空指针错误代码>在getView
方法中。字体文件确实存在,我正在其他活动中使用它。
view.txtViewTitle2 = (TextView) convertView.findViewById(R.id.textView2)
view.txtViewTitle2.setTypeface(font);