Wednesday, October 4, 2017

Listview với các dòng có màu khác nhau

Để custom ListView ta có nhiều cách làm. Ta đã biết cách tô màu chữ cho ListView, vậy có cách nào để tô màu từng dòng khác nhau hay không?
Trước tiên, hãy sửa mảng dữ liệu thành ArrayList như sau.
Đầu tiên khai báo mảng
ArrayList<String> qua2 = new ArrayList<String>();
Tiếp theo thêm các phần tử vào mảng.
qua2.add("Pear");
qua2.add("Banana");
qua2.add("Cashew");
qua2.add("Orange");
qua2.add("Water melon");
qua2.add("Peach");
qua2.add("Grape");
qua2.add("Mango");
qua2.add("Plum");

Tạo một class mới có tên listp, toàn bộ code của class này như sau.
public class listp extends ArrayAdapter<String> {
      
private final Activity context;  
private final ArrayList<String>  item;    
public listp(Activity context, ArrayList<String> item) {
     super(context, R.layout.li, item);
              // TODO Auto-generated constructor stub             
     this.context=context;            
     this.item=item;             
}   
     @SuppressLint({ "ViewHolder", "InflateParams" })
public View getView(int position,View view,ViewGroup parent) {
LayoutInflater inflater=context.getLayoutInflater();
View rowView=inflater.inflate(R.layout.li, null,true);            
TextView txtTitle = (TextView) rowView.findViewById(R.id.text);             
     txtTitle.setText(item.get(position));
             
     if(position==0){
              txtTitle.setTextColor(Color.parseColor("#FF0000"));
              }
     else if(position==1){
              txtTitle.setTextColor(Color.parseColor("#FF7F50")); 
              }
     else if(position==2){
                   txtTitle.setTextColor(Color.parseColor("#0000FF")); 
                   }
     else if(position==3){
                   txtTitle.setTextColor(Color.parseColor("#00ffff")); 
                   }
     else if(position==4){
                   txtTitle.setTextColor(Color.parseColor("#800080")); 
                   }
     else if(position==5){
                   txtTitle.setTextColor(Color.parseColor("#00FF00")); 
                   }
     else if(position==6){
                   txtTitle.setTextColor(Color.parseColor("#800000")); 
                   }
              else if(position==7){
                   txtTitle.setTextColor(Color.parseColor("#008000")); 
                   }
              else{
                   txtTitle.setTextColor(Color.parseColor("#FF00FF"));
              }            
              return rowView;
             
          };
     }
Tức là ta tạo Adapter riêng theo kiểu của mình. Trong các lệnh if ta đổ màu cho dòng tùy theo vị trí của nó, bạn có thể sửa tùy ý.Sau đó vào class có ListView để sửa khai báo Adapter như sau.
adapter= new listp(this,qua2);
Lúc này chạy ra bạn sẽ thấy ListView đã có màu khác nhau cho từng dòng.
Nếu muốn chỉnh font cho ListView, ta thêm dòng sau vào trong class listp
txtTitle.setTypeface(Typeface.MONOSPACE, Typeface.BOLD);
Nếu muốn chỉnh độ lớn nhỏ font, thêm dòng sau
txtTitle.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, 16);
Chạy thử để thấy font đã thay đổi


No comments:

Post a Comment