Reputation: 736
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
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
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