我尝试使用此方法为文本视图设置字体:
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);
}
但现在我想为这个listview适配器设置相同的字体:
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
}
});
}
}
有什么建议吗? 提前谢谢你。
答案 0 :(得分:6)
只需覆盖适配器的getView
方法:
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;
}
};
答案 1 :(得分:0)
这是你需要的吗? 我建议您使用自定义列表适配器,它可以帮助您根据需要添加或自定义列表视图。
例如在getView()方法中你可以这样做
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;
}
}
如果您需要使用您尝试使用的函数而不是编写所有内容,只需从getView()方法调用setAppFont(convertView, face)