Android中修改ArrayAdapter字体以及颜色

在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     }

 

posted @ 2015-12-26 01:47  Travis_007  阅读(3046)  评论(0编辑  收藏  举报