Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android自定義模擬勾選框

android自定義模擬勾選框

編輯:關於Android編程

android是默認是有CheckBox的,但是這種定死的多選框太難看了。   要想讓其變得好看的話就需要重寫其中的方法,但是重寫原方法的文章我搜到的比較少,加上時間比較緊張了,所以就來不及去研究那些源碼了。   所以就自己利用ImageButton做了一個類似的,這並不是真正意義上的多選框,但是實現了多選框的功能。感覺效果還不錯。   效果圖如下:       至於原理很簡單:   每一個選項就是一個LinearLayout   每個LinearLayout裡面包含一個TextView和一個ImageButton,而我們只需要對ImageButton添加監聽就可以了。   代碼如下:    
public class SetRMPLDialog extends RelativeLayout{  
      
    private Context parentContext;  
    private android.view.ViewGroup.LayoutParams lp;  
      
    /**布局*/  
    private TextView showtitle;  
    private int showtitleid=41310;  
      
    private RelativeLayout allitem;  
    private int allitemid=41320;  
    private Map<Integer,OneItem> itemmap;  
      
    private Button okBtn;  
    private Button exitBtn;  
      
    private PitchListen pitchlisten;//對按鈕的監聽  
    private BtnListen btnlisten;//對確定和退出按鈕的監聽  
  
    public SetRMPLDialog(Context context) {  
        super(context);  
        this.parentContext=context;  
        pitchlisten=new PitchListen();  
        btnlisten=new BtnListen();  
        init();  
    }  
      
    private void init() {  
        showtitle=new TextView(parentContext);  
        showtitle.setText("請選擇屏蔽號碼的位數");  
        showtitle.setId(showtitleid);  
        LayoutParams lpshowtitle=new LayoutParams(-2,-2);  
        lpshowtitle.addRule(RelativeLayout.ALIGN_PARENT_TOP);  
        lpshowtitle.addRule(RelativeLayout.CENTER_HORIZONTAL);  
          
          
        allitem=new RelativeLayout(parentContext);  
        allitem.setId(allitemid);  
        LayoutParams lpallitem=new LayoutParams(-2,200);  
        lpallitem.addRule(RelativeLayout.BELOW,showtitleid);  
        itemmap=new HashMap<Integer, SetRMPLDialog.OneItem>();  
        //創建顯示列表  
        createItem();  
          
        okBtn=new Button(parentContext);  
        okBtn.setText("確定");  
        LayoutParams lpokBtn=new LayoutParams(-2,-2);  
        lpokBtn.setMargins(20, 0, 0, 0);  
        lpokBtn.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);  
        lpokBtn.addRule(RelativeLayout.ALIGN_PARENT_LEFT);  
          
        exitBtn=new Button(parentContext);  
        exitBtn.setText("退出");  
        LayoutParams lpexitBtn=new LayoutParams(-2,-2);  
        lpexitBtn.setMargins(0, 0, 20, 0);  
        lpexitBtn.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);  
        lpexitBtn.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);  
          
        addView(showtitle,lpshowtitle);  
        addView(allitem,lpallitem);  
        addView(okBtn,lpokBtn);  
        addView(exitBtn,lpexitBtn);  
    }  
  
    public void createItem(){  
        for(int i=5;i<=13;i++){  
            OneItem oneitem=new OneItem(parentContext, i);  
            allitem.addView(oneitem,oneitem.getLpitem());  
            itemmap.put(oneitem.getI(), oneitem);  
        }  
    }  
  
    public android.view.ViewGroup.LayoutParams getLp() {  
        lp=new android.view.ViewGroup.LayoutParams(-1,300);  
        return lp;  
    }  
      
    class OneItem extends LinearLayout{  
        int i;  
        TextView text;  
        ImageButton sel;  
        android.widget.RelativeLayout.LayoutParams lpitem;  
        public OneItem(Context context,int i) {  
            super(context);  
            this.i=i;  
            text=new TextView(parentContext);  
            text.setText((i!=13)?i+"位:":"13+"+"位:");  
            LayoutParams lptext=new LayoutParams(70,40);  
            lptext.setMargins(0, 5, 0, 5);  
            sel=new ImageButton(parentContext);  
            //添加圖片選擇資源  
            sel.setBackgroundResource(R.drawable.nopitch);  
            LayoutParams lpsel=new LayoutParams(40,40);  
            lpsel.setMargins(5, 5, 5, 5);  
            addView(text,lptext);  
            addView(sel,lpsel);  
            //添加測試的背景顏色  
            this.setBackgroundColor(Color.CYAN);  
              
            //對選項按鈕添加監聽  
            sel.setOnClickListener(pitchlisten);  
        }  
          
        public android.widget.RelativeLayout.LayoutParams getLpitem(){  
            lpitem=new android.widget.RelativeLayout.LayoutParams(120,50);  
            switch (i%3) {  
            case 0:  
                //6.9.12  
                lpitem.addRule(RelativeLayout.CENTER_HORIZONTAL);  
                break;  
            case 1:  
                //7,10,13  
                lpitem.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);  
                break;  
                  
            default:  
                //5,8,11  
                lpitem.addRule(RelativeLayout.ALIGN_PARENT_LEFT);  
                break;  
            }  
            switch ((i-5)/3) {  
            case 0:  
                lpitem.addRule(RelativeLayout.ALIGN_PARENT_TOP);  
                break;  
            case 1:  
                lpitem.addRule(RelativeLayout.CENTER_VERTICAL);  
                break;  
            default:  
                lpitem.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);  
                break;  
            }  
              
            return lpitem;  
        }  
  
        public int getI() {  
            return i;  
        }  
  
        public void setI(int i) {  
            this.i = i;  
        }  
  
        public TextView getText() {  
            return text;  
        }  
  
        public void setText(TextView text) {  
            this.text = text;  
        }  
  
        public ImageButton getSel() {  
            return sel;  
        }  
  
        public void setSel(ImageButton sel) {  
            this.sel = sel;  
        }  
          
          
    }  
  
    class PitchListen implements OnClickListener {  
  
        @Override  
        public void onClick(View v) {  
            Set<Integer> pitchSet = DBHelper.getPitchSet();  
            if (v instanceof ImageButton) {  
                ImageButton sel = (ImageButton) v;  
                OneItem oneitem = (OneItem) sel.getParent();  
                int i=oneitem.getI();  
                Log.i("tag", "選擇了"+i+"號按鈕");  
                if(pitchSet.contains(i)){  
                    oneitem.getSel().setBackgroundResource(R.drawable.nopitch);  
                    pitchSet.remove(i);  
                }else{  
                    oneitem.getSel().setBackgroundResource(R.drawable.pitch);  
                    pitchSet.add(i);  
                }  
            }  
        }  
    }  
      
    class BtnListen implements OnClickListener{  
  
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            if(v==okBtn){  
                Log.i("tag", "okBtn");  
            }else if(v==exitBtn){  
                Log.i("tag", "exitBtn");  
            }else{  
                Log.e("error", this.toString()+"監聽按鈕出異常了");  
            }  
        }  
          
    }  
}  

 

    DBHelper類:
public class DBHelper {  
    static Map<String,User> blackmap;  
    static Map<String,User> whitemap;  
    static Set<String> selectset;  
    static Map<String,String> dustbin;  
    static Set<Integer> pitchset;  
      
    public static Set<Integer> getPitchSet(){  
        if(pitchset==null){  
            pitchset=new HashSet<Integer>();  
        }  
        return pitchset;  
    }  
}  

 

  然後,大功告成了,應該實現了多選框的功能。 下面我還設定了2個按鈕,分別為提交和取消,提交的話直接上傳一個Set集合就可以了。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved