简体   繁体   中英

Custom Typface in android ListView with SimpleAdapter

Can anyone tell me how to change the typeface of the listview to arial i'm not able to figure it out.

Following is my code:

public class TopNewsActivity extends ListActivity {

public static final String LOG_TAG = "Infra";
private ProgressDialog progressDialog;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listplaceholder);
    new BackgroundAsyncTask().execute();
}

public class BackgroundAsyncTask extends AsyncTask<String, Integer, ArrayList<HashMap<String, String>>> {

    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(TopNewsGroup.group);
        progressDialog.setCancelable(true);
        progressDialog.setMessage("Loading...");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setProgress(0);
        progressDialog.show();
    }

    @Override
    protected ArrayList<HashMap<String, String>> doInBackground(String... paths) {

        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

        String xml = XMLfunctions.getTopNewsXML();
        Document doc = XMLfunctions.XMLfromString(xml);

        int numResults = XMLfunctions.numResults(doc);
        Log.d(LOG_TAG, "Number of Results: " + numResults);
        if ((numResults <= 0)) {
            Toast.makeText(TopNewsActivity.this, "No Result Found",Toast.LENGTH_LONG).show();
            return null;
        }

        NodeList nodes = doc.getElementsByTagName("result");

        for (int i = 0; i < nodes.getLength(); i++) {
            HashMap<String, String> map = new HashMap<String, String>();

            Element e = (Element) nodes.item(i);
            map.put("id", XMLfunctions.getValue(e, "id"));
            map.put("title", XMLfunctions.getValue(e, "title"));
            map.put("date", XMLfunctions.getValue(e, "date"));
            map.put("recordDate", XMLfunctions.getValue(e, "recordDate"));
            mylist.add(map);
        }
        return mylist;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }

    protected void onPostExecute(ArrayList<HashMap<String, String>> result) {

        ListAdapter adapter = new MySimpleAdapter(TopNewsActivity.this, result, R.layout.list_item, new String[] { "title", "date" }, new int[] { R.id.item_title, R.id.item_subtitle });
        setListAdapter(adapter);
        progressDialog.dismiss();

        final ListView lv = getListView();

        lv.setTextFilterEnabled(true);  
        lv.setOnItemClickListener(new OnItemClickListener() {
            @SuppressWarnings("unchecked")
            @Override
            public void onItemClick(AdapterView<?> a, View view, final int position, long id) {

                HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);

                Intent i = new Intent(TopNewsActivity.this, NewsDetails.class);
                i.putExtra("content_id", o.get("id"));
                i.putExtra("title", o.get("title"));
                i.putExtra("date", o.get("recordDate"));
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                View v = TopNewsGroup.group.getLocalActivityManager().startActivity("ShowNews", i).getDecorView();

                // Again, replace the view
                TopNewsGroup.group.replaceView(v);
            }
        });
    }
}

public class MySimpleAdapter extends SimpleAdapter {
    public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
    }

    @Override
    public View getView(int position, View view, ViewGroup parent){

        LayoutInflater inflater = getLayoutInflater();
        Typeface localTypeface1 = Typeface.createFromAsset(getAssets(), "fonts/arial.ttf");
        View v = super.getView(position, view, parent);
         ((TextView)v).setTypeface(localTypeface1);
         return v;


    }
}

}

Please help

Was simple enough

public class MySimpleAdapter extends SimpleAdapter {

    private ArrayList<HashMap<String, String>> results;

    public MySimpleAdapter(Context context, ArrayList<HashMap<String, String>> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        this.results = data;
    }

    public View getView(int position, View view, ViewGroup parent){

        Typeface localTypeface1 = Typeface.createFromAsset(getAssets(), "fonts/arial.ttf");
        View v = view;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.list_item, null);
        }
        TextView tt = (TextView) v.findViewById(R.id.item_title);
        tt.setText(results.get(position).get("title"));
        tt.setTypeface(localTypeface1);
        TextView bt = (TextView) v.findViewById(R.id.item_subtitle);
        bt.setText(results.get(position).get("date"));
        bt.setTypeface(localTypeface1);
        return v;
    }
}

That's it:)

If you don't want to create a new class you can override the getView method when creating the SimpleAdapter... refer to my answer on a similar question:

Custon Typeface in listview with SimpleAdapter

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM