自定义组合控件

有时候一个布局需要重复被使用,为了避免更改其中一个布局可能造成所有相同的布局都要更改的局面,所以把这些相同的布局抽取出来,封装成一个布局文件。
本次组合是使用一个TextView加上一个CheckBox,大概的样子就如图所示了。

自定义组合控件_第1张图片
Paste_Image.png

创建一个setting_custom.xml的文件,布局如下。

Paste_Image.png

取消掉CheckBox的点击事件,使得整个控件可以被点击。


    

      


  



在CustomSetting.java中开始写代码

package com.example.customwidget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.TextView;

/*
创建一个CustomSetting去继承LinearLayout,然后写出CustomSetting的构造函数
*/
public class CustomSetting extends LinearLayout {    
  private View item;    
  private TextView tv_con;    
  private CheckBox cb_check;    

/*
在构造函数中进行初始化界面和事件
*/
  public CustomSetting(Context context, AttributeSet attrs) {        
    super(context, attrs);        
    initView();        
    initEvent();    
  }    
   private void initEvent() {        
       cb_check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
           @Override            
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                
                if (isChecked) {                    
                   tv_con.setText("被勾选了");               
               }else {                    
                   tv_con.setText("没被勾选");               
               }            
          }       
     });    
}    

    private void initView() {        
      item = View.inflate(getContext(), R.layout.setting_custom, null);        
      addView(item);        
      tv_con = (TextView) item.findViewById(R.id.tv_custom_content);        
      cb_check = (CheckBox) item.findViewById(R.id.cb_custom_check);    
    }    

/*
以下是对外界提供一些方法,可以用来更改组合控件的文字显示,以及使用点击事件
*/

    public void setCustomContent(String text){        
        tv_con.setText(text);    
    }    

    public void setIsChecked(boolean isChecked){        
        cb_check.setChecked(isChecked);    
    }    

    public boolean isChecked(){        
        return cb_check.isChecked();   
   }    

    public void setItemClickListener(OnClickListener listener){       
       item.setOnClickListener(listener);    
    }
}

在activity_main.xml中设置activity的主界面


    


      
  



package com.example.customwidget;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {    
  private CustomSetting cs_con;    

  @Override    
  protected void onCreate(Bundle savedInstanceState) {        
     super.onCreate(savedInstanceState);       
     initView();        
     initEvent();    
  }    
  private void initEvent() {        
    cs_con.setCustomContent("暂时还没有被点击");  //设置文字
//对整个控件使用点击事件,从而改变CheckBox的状态      
    cs_con.setItemClickListener(new View.OnClickListener() {            
       @Override            
       public void onClick(View v) {                
       cs_con.setIsChecked(!cs_con.isChecked());            
       }       
    });    
   }    
 private void initView() {        
   setContentView(R.layout.activity_main); 
//需要向下转型成CustomSetting
   cs_con = (CustomSetting) findViewById(R.id.cs_main);    
   }
}

最终效果如下


Paste_Image.png

点击后:

Paste_Image.png

取消勾选:

Paste_Image.png

你可能感兴趣的:(自定义组合控件)