2

ListViewうまくスクロールするアイテムが100個あります。の1つにカスタムフォントを1つ追加しまし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;
    }

もっと良い方法はありますか?

4

2 に答える 2

8

が呼び出されるたびに同じ書体を作成しているのでgetView()、次の行をコンストラクターに移動します。

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

また、TextViewが作成されたときだけでなく、毎回書体を再設定する必要はおそらくありません。

if (convertView == null) {
    ...
    holder.t1 = (TextView) convertView.findViewById(R.id.itemName);
    holder.t1.setTypeface(myTypeface); // Move this here
}
于 2012-10-19T17:45:58.430 に答える
6

getViewが呼び出されるたびに新しい書体を作成しているようです(これはたくさんあります)。myTypeface = Typeface.createFromAsset(convertView.getContext().getAssets(), "fonts/listitemfont.ttf");アダプターのコンストラクターに移動してみてください。

于 2012-10-19T17:45:32.840 に答える