自定義加減+自定義流式佈局
阿新 • • 發佈:2018-12-11
一、自定義流式佈局
public class CustomView extends ViewGroup { private int mleftMargin=20; private int mtopMargin=20; public CustomView(Context context) { this(context,null); } public CustomView(Context context, AttributeSet attrs) { this(context, attrs,0); } public CustomView(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; } } }
二、自定義加減
public class MyJIaJianView extends LinearLayout{ private TextView jiaTv,jiantv; private EditText numEt; private int num = 1; public MyJIaJianView(Context context) { this(context,null); } public MyJIaJianView(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public MyJIaJianView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private void init(Context context) { View view = LayoutInflater.from(context).inflate(R.layout.jia_jian_layout,this,true); jiaTv = (TextView) view.findViewById(R.id.jia); jiantv = (TextView) view.findViewById(R.id.jian); numEt = (EditText) view.findViewById(R.id.num); numEt.setText(num+""); jiaTv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { num++; numEt.setText(num+""); if (jiaJianListener!=null){ jiaJianListener.getNum(num); } } }); jiantv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { num--; if (num<=0){ Toast.makeText(getContext(),"數量不能小於1",Toast.LENGTH_SHORT).show(); num = 1; } numEt.setText(num+""); if (jiaJianListener!=null){ jiaJianListener.getNum(num); } } }); } public void setNumEt(int n){ numEt.setText(n+""); num = Integer.parseInt(numEt.getText().toString()); } private JiaJianListener jiaJianListener; public void setJiaJianListener(JiaJianListener jiaJianListener){ this.jiaJianListener = jiaJianListener; } public interface JiaJianListener{ void getNum(int num); } }