在Android开发中,ArrayAdapter不能修改TextView的字体或者颜色。
所以如果想要修改这些属性,则要自己继承ArrayAdapter类,重载getView函数。
在getView中通过position获取Item的内容,赋值给TextView。即:
1 String str =(String)getItem(position);//通过position获取当前要赋值的内容,例如 第一次要显示的“han”就会传入str中 2 TextView tv = (TextView) convertView.findViewById(android.R.id.text1); 3 tv.setText(str);//设置TextView中的字符串
如果想监听TextView的点击事件,可以实现OnClickListener接口,在onClick函数中动态修改点击的Item的字体大小,颜色。
Activity中部分代码如下:
1 ListView lv = null; 2 @Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.activity_main); 6 lv = (ListView)findViewById(R.id.lv); 7 String[] strs = new String[]{"han","wang","zhao","qian"}; 8 MyAdapter<String> ad = new MyAdapter<String>(this,android.R.layout.simple_list_item_1,strs); 9 lv.setAdapter(ad); 10 11 } 12 //MyAdapter 继承 ArrayAdapter 13 private class MyAdapter<T> extends ArrayAdapter{ 14 15 public MyAdapter(Context context, int resource, Object[] objects) { 16 super(context, resource, objects); 17 } 18 19 MyListener listener = new MyListener(); 20 //重载getView函数,等于说该函数完全接管ArrayAdapter的设置TextView操作 21 @Override 22 public View getView(int position, View convertView, ViewGroup parent) { 23 String str =(String)getItem(position);//通过position获取当前要赋值的内容 24 if (convertView == null) { 25 convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_1, parent, false); 26 } 27 TextView tv = (TextView) convertView.findViewById(android.R.id.text1); 28 tv.setText(str);//设置TextView中的字符串 29 tv.setTextSize(10);//设置大小 30 tv.setOnClickListener(listener);//为每个TextView加载监听函数 31 return convertView; 32 } 33 //MyListener类继承OnClickListener,用来监听每个Item的点击事件 34 private class MyListener implements View.OnClickListener{ 35 TextView lastTv = null;//记录上一个变色的TextView 36 @Override 37 public void onClick(View v) { 38 TextView tv = (TextView)v; 39 if(lastTv != null){//若lastTv不为空则要将lastTv颜色和字体大小初始化 40 lastTv.setTextSize(10); 41 lastTv.setBackgroundColor(Color.WHITE); 42 } 43 tv.setTextSize(20); 44 tv.setBackgroundColor(Color.RED); 45 lastTv = tv;//保存点击的TextView 46 } 47 } 48 }
原文:http://www.cnblogs.com/macher/p/5077388.html