0

アプリのフォントの変更を高速化する方法はありますか?

ListViewXMLからオンラインでリストをロードするがあります。すべて問題ありませんが、アセットフォルダからフォントをカスタムフォントに変更する必要があります。

私が適用したとき:

 TxEventName = (TextView)row.findViewById(id.eventNameTx);
 TxEventName.setText(getEventsCount(position));
 TxEventName.setTypeface(Utilities.textFont(this.getContext()));

を適用したので遅くなりsetTypefaceます。

最初にUIレイアウトをロードしてからリストをロードする場合もあれば、黒い画面が遅れる場合もあります。次のアクティビティが表示されると、リストはすでに存在します。

私はAsyncTaskリストの値をロードするために使用しています。これは次のようなものです。

private class initList extends AsyncTask<Void, Void, Void>{

    @Override
    protected Void doInBackground(Void... params) {

        SimpleDateFormat formatterc; 
        Date xdatec=null; 
        formatterc = new SimpleDateFormat("dd/MM/yy");
        try {
            xdatec = (Date)formatterc.parse(date);
            SimpleDateFormat frmtr = new SimpleDateFormat(dateTemplateForChecking);
            selectedDate = frmtr.format(xdatec).toString();
        } catch (ParseException e) {
            e.printStackTrace();
        }

        for(int i = 0; i < XMLParser.ppEvents.size(); i++) {
            EventsObj evObj = XMLParser.ppEvents.get(i);

            for(int j = 0; j < evObj.date.size(); j++) {
                if(selectedDate.equalsIgnoreCase(evObj.date.get(j))) {

                    StringBuilder sbldr = new StringBuilder();
                    sbldr.append(evObj.act_id);
                    sbldr.append("!");
                    if (SelectLanguage.lang == "ENG"){
                    sbldr.append(evObj.name_en);
                    } else if (SelectLanguage.lang == "TCH"){
                        sbldr.append(evObj.name_tc);
                    } else if (SelectLanguage.lang == "SCH"){
                        sbldr.append(evObj.name_sc);
                    }

                    mainEvents.add(sbldr.toString());
                    eventID.add(Integer.toString(evObj.act_id));
                }   
            }
        }
        adapter = new events_adapter(PublicProg.this, layout.events_adapter, id.eventNameTx, mainEvents);
        return null;
    }

    protected void onPostExecute(Void result){
        eventList.setAdapter(adapter);
    }

    protected void onPreExecute(){
        Bundle ext = getIntent().getExtras();

        position = ext.getString("position");
        date = ext.getString("date");

        mainEvents = new ArrayList<String>();
        eventID = new ArrayList<String>();
    }
}
4

3 に答える 3

1

これを使用して、次の単純なキャッシュを作成しますTypeface

public class Typefaces{

private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>();

    public static Typeface get(Context c, String name){
        synchronized(cache){
            if(!cache.containsKey(name)){
                Typeface t = Typeface.createFromAsset(
                        c.getAssets(), 
                        String.format("fonts/%s.OTF", name)
                    );
                cache.put(name, t);
            }
            return cache.get(name);
        }
    }

}

アダプターコンストラクターでカスタムを初期化しますTypeface

myriadBold = Typefaces.get(mContext, "MYRIADPRO-BOLD");

でそれを使用しますgetView

txt.setTypeface(myriadBold);

skiaこのようにして、 customeフォントを生成するためのシステムコールの数を減らします。

于 2012-08-16T16:17:01.813 に答える
0

Typefaceあなたはあなたの習慣を通して設定することができますTextView

public class TextViewGeorgiaBold extends TextView {

Resources res = getResources();
String font_path = res.getString(R.string.MAIN_FONT);

public TextViewGeorgiaBold(Context context, AttributeSet attrs, int defStyle) {
    super(context.getApplicationContext(), attrs, defStyle);
    Typeface font = Typeface.createFromAsset(getContext()
            .getApplicationContext().getAssets(), font_path);
    setTypeface(font);
}

public TextViewGeorgiaBold(Context context, AttributeSet attrs) {
    super(context.getApplicationContext(), attrs);
    Typeface font = Typeface.createFromAsset(getContext()
            .getApplicationContext().getAssets(), font_path);
    setTypeface(font);

}

public TextViewGeorgiaBold(Context context) {
    super(context.getApplicationContext());
    Typeface font = Typeface.createFromAsset(getContext()
            .getApplicationContext().getAssets(), font_path);
    setTypeface(font);
}

}

TypeFaceレイアウトのインフレ時に設定します。

それはあなたを助けるかもしれません。

于 2012-08-16T16:14:01.840 に答える
0

書体を設定する場所は適切ではないかもしれません。

また、Utilities.textFont(this.getContext())を使用すると、ファイルシステムからフォントを読み取っている可能性があります。これにより、プロセスが遅くなる可能性があり、この行が呼び出される場所によっては、UIがロックされます。

于 2012-08-16T16:01:35.817 に答える