自定义流式布局
package com.example.shopcart04.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewGroup;
public class MyView extends ViewGroup {
private int mleftMargin = 20;
private int mtopMargin = 20;
public MyView(Context context) {
this(context,null);
}
public MyView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//绘制
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
measureChildren(widthMeasureSpec,heightMeasureSpec);
int leftMargin = mleftMargin;
int topMargin = mtopMargin;
//宽度
int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
//高度
int modeHeight = MeasureSpec.getMode(heightMeasureSpec);
//判断
switch (modeHeight){
case MeasureSpec.AT_MOST:
int measuredHeight = 0;
//循环遍历得到子的元素
for (int j=0;j<getChildCount();j++){
int measuredWidth = getChildAt(j).getMeasuredWidth();
measuredHeight = getChildAt(j).getMeasuredHeight();
if (leftMargin+measuredWidth+mleftMargin>getWidth()){
leftMargin = mleftMargin;
topMargin+=measuredHeight+mtopMargin;
}
leftMargin+=measuredWidth+mleftMargin;
}
topMargin+=measuredHeight+mtopMargin;
break;
}
setMeasuredDimension(sizeWidth,topMargin);
}
@Override
protected void onLayout(boolean b, int i, int i1, int i2, int i3) {
int leftMargin = mleftMargin;
int topMargin = mtopMargin;
for (int j=0;j<getChildCount();j++){
int measuredWidth = getChildAt(j).getMeasuredWidth();
int measuredHeight = getChildAt(j).getMeasuredHeight();
if (leftMargin+measuredWidth+mleftMargin>getWidth()){
leftMargin=mleftMargin;
topMargin+=measuredHeight+mtopMargin;
getChildAt(j).layout(leftMargin,topMargin,leftMargin+measuredWidth,topMargin+measuredHeight);
}else {
getChildAt(j).layout(leftMargin,topMargin,leftMargin+measuredWidth,topMargin+measuredHeight);
}
leftMargin+=measuredWidth+mleftMargin;
}
}
}
自定义加减号
package com.example.shopcart04.widge;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.example.shopcart04.R;
public class ButtonView extends LinearLayout implements View.OnClickListener {
private Button jia;
private Button jian;
private TextView text_num;
public ButtonView(Context context) {
this(context,null);
}
public ButtonView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public ButtonView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
LayoutInflater.from(context).inflate(R.layout.view_layout, this);
jia = findViewById(R.id.jia);
jian = findViewById(R.id.jian);
text_num = findViewById(R.id.text_num);
jia.setOnClickListener(this);
jian.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String s = text_num.getText().toString();
int i = Integer.parseInt(s);
switch (v.getId()){
case R.id.jia:
addAndMinusu.add();
break;
case R.id.jian:
if (i>0){
if(addAndMinusu!=null){
addAndMinusu.minus();
}
}else {
Toast.makeText(getContext(),"商品数量不能小于0",Toast.LENGTH_SHORT).show();
}
}
}
//定义的接口回调
private AddAndMinus addAndMinusu;
public interface AddAndMinus{
void add();
void minus();
}
public void setAddAndMinusu(AddAndMinus addAndMinusu){
this.addAndMinusu=addAndMinusu;
}
}