-1

如何在 android ListView 中使用自定义字体?

这是我的代码:

MainActivity.java

package com.sj.customlistview;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.AdapterView;

public class MainActivity extends ListActivity{    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.activity_main);        
        initView();   
    }

    private void initView() {
        List<Application> apps = populateSampleApplication();
        AppAdapter adapter = new AppAdapter(this, apps);
        setListAdapter(adapter);        
    }

    private List<Application> populateSampleApplication(){        
        String[] apps = new String[] {                
            "Google,3502,5,google",
            "Apple,3502,4,apple",
            "Twitter,3502,3,twitter",
            "Skype,3502,0,skype",
            "Facebook,500560,1,facebook"
        };








        List<Application> list = new ArrayList<Application>();

        for(String app:apps) {
            String[] rApp = app.split(","); 
            Application ap = new Application();
            ap.setTitle(rApp[0]);
            ap.setTotalDl(Integer.parseInt(rApp[1]));
            ap.setRating(Integer.parseInt(rApp[2]));
            ap.setIcon(rApp[3]);
            list.add(ap);
        }

        return list;
    }
}

应用程序.java

package com.sj.customlistview;

public class Application {
    private String title;
    private long totalDl;
    private int rating;
    private String icon;

    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public long getTotalDl() {
        return totalDl;
    }
    public void setTotalDl(long totalDl) {
        this.totalDl = totalDl;
    }
    public int getRating() {
        return rating;
    }
    public void setRating(int rating) {
        this.rating = rating;
    }
    public String getIcon() {
        return icon;
    }
    public void setIcon(String icon) {
        this.icon = icon;
    }
}

ArrayAdapter.java

package com.sj.customlistview;

import java.text.NumberFormat;
import java.util.List;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class AppAdapter extends ArrayAdapter<Application>{



    private List<Application> items;

    public AppAdapter(Context context, List<Application> items) {
        super(context, R.layout.app_custom_list, items);
        this.items = items;


    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;

        if(v == null) {
            LayoutInflater li = LayoutInflater.from(getContext());
            v = li.inflate(R.layout.app_custom_list, null);            
        }

        Application app = items.get(position);

        if(app != null) {
            ImageView icon = (ImageView)v.findViewById(R.id.appIcon);
            TextView titleText = (TextView)v.findViewById(R.id.titleTxt);
            LinearLayout ratingCntr = (LinearLayout)v.findViewById(R.id.ratingCntr);
            TextView dlText = (TextView)v.findViewById(R.id.dlTxt);

            if(icon != null) {
                Resources res = getContext().getResources();
                String sIcon = "com.sj.customlistview:drawable/" + app.getIcon();
                icon.setImageDrawable(res.getDrawable(res.getIdentifier(sIcon, null, null)));
            }

            if(titleText != null) titleText.setText(app.getTitle());

            if(dlText != null) {
                NumberFormat nf = NumberFormat.getNumberInstance();
                dlText.setText(nf.format(app.getTotalDl())+" dl");            
            }

            if(ratingCntr != null && ratingCntr.getChildCount() == 0) {        
                /*
                 * max rating: 5
                 */
                for(int i=1; i<=5; i++) {
                    ImageView iv = new ImageView(getContext());

                    if(i <= app.getRating()) {
                        iv.setImageDrawable(getContext().getResources().getDrawable(R.drawable.start_checked));
                    }
                    else {                
                        iv.setImageDrawable(getContext().getResources().getDrawable(R.drawable.start_unchecked));
                    }

                    ratingCntr.addView(iv);
                }
            }
        }

        return v;
    }
}
4

1 回答 1

0

在项目的根目录(与“res”和“java”相同的级别)创建一个“assets”目录,并将字体文件放在那里。然后做这样的事情:

((TextView) findViewById(R.id.your_id_here))
    .setTypeface(Typeface.createFromAsset(context.getAssets(), "my_custom_font.ttf")

参考资料:http: //developer.android.com/reference/android/widget/TextView.html#setTypeface%28android.graphics.Typeface%29

于 2013-09-16T00:47:30.663 回答