Android-listView中的自定义字体使滚动延迟?

The*_*ter 2 fonts android android-listview

我有ListView一百个项目滚动很好.我为其中一个添加了一个自定义字体TextView,现在它不稳定了.我尝试了otf和ttf字体.

这是我如何编码(简化):

public class ItemAdapter extends ArrayAdapter<ItemObject> implements
        SectionIndexer {

private Typeface myTypeface; // class variable

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

        if (convertView == null) {

            convertView = inflater.inflate(R.layout.item_row_layout, parent,
                    false);
            holder = new ViewHolder();
            holder.t1 = (TextView) convertView.findViewById(R.id.itemName);


            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }



        ItemObject io = getItem(position);
        String name = io.name;


        myTypeface = Typeface.createFromAsset(convertView.getContext().getAssets(), "fonts/listitemfont.ttf");

        holder.t1.setText(name);
        holder.t1.setTypeface(myTypeface);


        return convertView;
    }
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

Sam*_*Sam 8

您正在创建相同的字体一次getView()被调用时,移动此行到您的构造函数:

myTypeface = Typeface.createFromAsset(convertView.getContext().getAssets(), "fonts/listitemfont.ttf");
Run Code Online (Sandbox Code Playgroud)

并且您可能不需要每次都重新设置字体,就像创建TextView时一样.

if (convertView == null) {
    ...
    holder.t1 = (TextView) convertView.findViewById(R.id.itemName);
    holder.t1.setTypeface(myTypeface); // Move this here
}
Run Code Online (Sandbox Code Playgroud)


Ral*_*gha 6

看来你每次调用getView时都会创建一个新的Typeface(这很多).尝试myTypeface = Typeface.createFromAsset(convertView.getContext().getAssets(), "fonts/listitemfont.ttf");进入适配器的构造函数.