gpt4 book ai didi

java - 设置自定义字体时 ListView 变慢

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:57:01 26 4
gpt4 key购买 nike

我在 xml 文件中有一些数据,将其放在/res/values/mydata.xml 中。我想用自定义字体在 ListView 中显示数据。模拟器中的一切都很好,但在真实设备中(使用 samsung galaxy tab 10.1 2 和 android 4.0.3)滚动 ListView 时速度太慢。实际上它使用默认字体效果很好,但在设置自定义字体时出现问题。

这是我的java代码:

public class ShowFoodCalorie extends ListActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// reading data from xml file
setListAdapter(new MyAdapter(this, android.R.layout.simple_list_item_1,
R.id.textView1, getResources().getStringArray(R.array.food_cal)));
}
private class MyAdapter extends ArrayAdapter<String> {
public MyAdapter(Context context, int resource, int textViewResourceId,
String[] string) {
super(context, resource, textViewResourceId, string);
}

public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.show_all, parent, false);
String[] item = getResources().getStringArray(R.array.food_cal);
TextView tv = (TextView) row.findViewById(R.id.textView1);
try {
Typeface font = Typeface.createFromAsset(getAssets(),"myFont.ttf");
tv.setTypeface(font);
} catch (Exception e) {
Log.d("Alireza", e.getMessage().toString());
}

tv.setText(item[position]);
return row;
}
}

这是什么问题?是关于我的设备?任何解决方案都可以帮助我。谢谢

最佳答案

你的问题是那一行:

Typeface font = Typeface.createFromAsset(getAssets(),"myFont.ttf");

您应该在适配器的构造函数中执行一次,使 font 成为成员变量,而不仅仅是使用该变量在您的 上调用 setTypeface(font) > TextView

应避免在 getView() 方法中进行大量加载。

另请阅读适配器的 convertView/ViewHolder 模式,这也会提升您的性能。

用例子更新:

private class MyAdapter extends ArrayAdapter<String> {
Typeface font;

public MyAdapter(Context context, int resource, int textViewResourceId,
String[] string) {
super(context, resource, textViewResourceId, string);
font = Typeface.createFromAsset(context.getAssets(),"myFont.ttf");
}

public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.show_all, parent, false);
String[] item = getResources().getStringArray(R.array.food_cal);
TextView tv = (TextView) row.findViewById(R.id.textView1);
try {
tv.setTypeface(font);
} catch (Exception e) {
Log.d("Alireza", e.getMessage().toString());
}

tv.setText(item[position]);
return row;
}
}

关于java - 设置自定义字体时 ListView 变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13077525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com