Ziri
Ziri

Reputation: 736

Set typeface for listview

i tried to set typeface for text view with this method:

public static final void setAppFont(ViewGroup mContainer, Typeface mFont)
{
    if (mContainer == null || mFont == null) return;

    final int mCount = mContainer.getChildCount();

    // Loop through all of the children.
    for (int i = 0; i < mCount; ++i)
    {
        final View mChild = mContainer.getChildAt(i);
        if (mChild instanceof TextView)
        {
            // Set the font if it is a TextView.
            ((TextView) mChild).setTypeface(mFont);
        }
        else if (mChild instanceof ViewGroup)
        {
            // Recursively attempt another ViewGroup.
            setAppFont((ViewGroup) mChild, mFont);
        }
    }
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    // See assets/res/any/layout/styled_text.xml for this
    // view layout definition.
    setContentView(R.layout.read_asset);


    final Typeface mFont = Typeface.createFromAsset(getAssets(),
            "myfont.otf"); 
            final ViewGroup mContainer = (ViewGroup) findViewById(
            android.R.id.content).getRootView();
            MyActivity.setAppFont(mContainer, mFont);
}

but now i want to set the same typeface for this listview adapter:

public class MainActivity extends Activity {

// List view
private ListView lv;

// Listview Adapter

ArrayAdapter<String> adapter;


// Search EditText
EditText inputSearch;



// ArrayList for Listview

ArrayList<HashMap<String, String>> productList;


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

    // Listview Data


String products[] = {"item1", "item2","item3","item4","item5","item6" };



    lv = (ListView) findViewById(R.id.list_view);
    inputSearch = (EditText) findViewById(R.id.inputSearch);

    // Adding items to listview

    adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products);
    lv.setAdapter(adapter);

    /**
     * Enabling Search Filter
     * */
    inputSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            MainActivity.this.adapter.getFilter().filter(cs);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
        }
    });
}
}

Are there any suggestions? thank you in advance.

Upvotes: 1

Views: 6156

Answers (2)

G_S
G_S

Reputation: 7110

Is this what you need? I suggest you to use a custom list adapter which helps you in adding or customizing your list view as you need.

for example In the getView() method you can do like this

public View getView(int arg0, View arg1, ViewGroup arg2) {
View convertView = arg1;

            if(convertView == null)
            {
                 inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            }
            convertView = inflater.inflate(R.layout.inflating, arg2, false);
            TextView mTV_names = (TextView)convertView.findViewById(R.id.inflating_TV_names);

            // typeface used to display the text in different language other than english 
            // here it is tamil, hindi and telugu.

            Typeface face = Typeface.createFromAsset(getAssets(), "DroidSansRegionalAAD.ttf");

            //setting the typeface to the particular text 

            mTV_names.setTypeface(face);
            mTV_names.setText(""+countries[arg0]);
            return convertView;

        }
    } 

once have a look at check this

if you need to use the function that you are trying to use instead of writing all the stuff just call the setAppFont(convertView, face) from the getView() method

Upvotes: 0

sdabet
sdabet

Reputation: 18670

Just override the getView method of your adapter:

    final Typeface mFont = Typeface.createFromAsset(getAssets(), "myfont.otf"); 
    adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewGroup view = (ViewGroup) super.getView(position, convertView, parent);
            if(convertView == null) MyActivity.setAppFont(view, mFont);
            return view;
        }
    };

Upvotes: 6

Related Questions