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