1.首先创建一个Layout Resource File,名字随便起,继承相应的布局(例如:线性布局);
2.布局里面写上相应内容
3.在values下创建Values Resource File
<resources>
//name对应类的名称
<declare-styleable name="AddMinus" >
//name可自定义-----format对应布局中需要的参数类型
<attr name="zi_dong" format="integer"></attr>
</declare-styleable>
</resources>
4.创建一个类继承相应 布局(例如:线性布局,或者View,等...),重写布局的三个方法,第一个和第二个方法需要有所改动,然后在第三个方法中写逻辑代码,例如:
public class AddMinus extends LinearLayout {
private TextView number;
private ImageView one;
private ImageView two;
private int count;
public AddMinus(Context context) {
this(context,null);
}
public AddMinus(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public AddMinus(final Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//加载第一步中写的布局
inflate(context,R.layout.add_minus,this);
//初始化布局中相应的控件
number = findViewById(R.id.number);
one = findViewById(R.id.ima_minus);
two = findViewById(R.id.add);
//参数attrs对应方法中@Nullable AttributeSet后的参数
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddMinus);
//R.styleable.AddMinus_zi_dong对应第三步中创建的自定义名称
count = typedArray.getInteger(R.styleable.AddMinus_zi_dong,0);
typedArray.recycle();
number.setText(String.valueOf(count));
//对应控件的点击事件
one.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (count>1){
count--;
number.setText(String.valueOf(count));
}
}
});
two.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
count++;
number.setText(String.valueOf(count));
}
});
}
}
5.最后在主Activity中实例下,例如:
AddMinus addMinus = new AddMinus(this);
加一下点击吐司
1.首先在创建的继承布局的类里面写一个返回接口和set方法,并且在加减的时候加上返回值,例如:
one.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (count>1){ count--; number.setText(String.valueOf(count)); if (callback!=null){ callback.showShopNum(count); } } } }); two.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { count++; number.setText(String.valueOf(count)); if (callback!=null){ callback.showShopNum(count); } } }); } //设置set方法 private AddMinusCallback callback; public void setCallback(AddMinusCallback callback) { this.callback = callback; } //定义返回接口 public interface AddMinusCallback{ void showShopNum(int shopNum); }
2.在主Activity的布局中给子布局对象的控件id,并且主Activity中写子类的吐司方法,例如:
//初始化控件 addMinus = findViewById(R.id.add_d); addMinus.setCallback(new AddMinus.AddMinusCallback() { @Override public void showShopNum(int shopNum) { Toast.makeText(MainActivity.this,"当前数"+shopNum,Toast.LENGTH_SHORT).show(); } });