现在越来越多的移动App涉及到商城相关的领域,说到商城,作为一个程序员不得不提到的就是商品的管理,添加,删除,话不多说,直接上图贴代码!
正式开始我们的代码,以下就是关于自定义的代码
public class AddSubViewextends LinearLayoutimplements View.OnClickListener {
private int width;
private int height;
private int numlength;
private int numwidth;
private boolean isEdit;//是否可编辑
private TextViewmTvAdd;
private TextViewmTvSub;
private TextViewmTvNum;
private boolean setMaxNum =false;
private boolean setMinNum =false;
private int maxNum =99999;
private int minNum =1;
private AddSubClickListeneraddSubClickListener;
public AddSubView(Context context) {
this(context, null);
}
public AddSubView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public AddSubView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddSubView);
width = typedArray.getDimensionPixelSize(R.styleable.AddSubView_add_sub_width, 20);
numwidth = typedArray.getDimensionPixelSize(R.styleable.AddSubView_sum_widthh, 20);
height = typedArray.getDimensionPixelSize(R.styleable.AddSubView_add_sub_height, 20);
numlength = typedArray.getDimensionPixelSize(R.styleable.AddSubView_sum_height, 20);
maxNum = typedArray.getDimensionPixelSize(R.styleable.AddSubView_max_sum, 99999);
minNum = typedArray.getDimensionPixelSize(R.styleable.AddSubView_min_sum, 1);
isEdit = typedArray.getBoolean(R.styleable.AddSubView_isedit, false);
typedArray.recycle();
initView(context);
}
private void initView(Context context) {
View view = LayoutInflater.from(context).inflate(R.layout.add_sub_view, this);
mTvAdd = view.findViewById(R.id.tv_add);
mTvSub = view.findViewById(R.id.tv_sub);
mTvNum = view.findViewById(R.id.tv_num);
LayoutParams params =new LayoutParams(width, height);
mTvAdd.setLayoutParams(params);
mTvSub.setLayoutParams(params);
mTvNum.setLayoutParams(params);
LayoutParams numParams =new LayoutParams(numwidth, numlength);
mTvNum.setLayoutParams(numParams);
mTvSub.setOnClickListener(this);
mTvAdd.setOnClickListener(this);
setMaxNum(maxNum);
setMinNum(minNum);
}
public void setMaxNum(int maxNum) {
setMaxNum =true;
this.maxNum = maxNum;
}
public void setMinNum(int minNum) {
setMinNum =true;
this.minNum = minNum;
}
public void setNum(int num) {
if (setMinNum) {
if (num <=minNum) {
mTvSub.setEnabled(false);
}
}
if (setMaxNum) {
if (num >=maxNum) {
mTvAdd.setEnabled(false);
}
}
String s = Integer.toString(num);
mTvNum.setText(s);
}
public int getNum() {
String s =mTvNum.getText().toString();
return Integer.parseInt(s);
}
public void setAddSubClickListener(AddSubClickListener addSubClickListener) {
this.addSubClickListener = addSubClickListener;
}
@Override
public void onClick(View view) {
if (addSubClickListener !=null) {
if (view.getId() == R.id.tv_add) {
String s =mTvNum.getText().toString();
int num = Integer.parseInt(s);
if (setMaxNum) {
if (num
num++;
if (num ==maxNum) {
mTvAdd.setEnabled(false);
}
}
}else {
num++;
}
if (!mTvSub.isEnabled()) {
mTvSub.setEnabled(true);
}
mTvNum.setText(Integer.toString(num));
addSubClickListener.addSubClickListener(num);
}else if (view.getId() == R.id.tv_sub) {
String s =mTvNum.getText().toString();
int num = Integer.parseInt(s);
if (setMinNum) {
if (num >minNum) {
num--;
if (num ==minNum) {
mTvSub.setEnabled(false);
}
}
}else {
num--;
}
if (!mTvAdd.isEnabled()) {
mTvAdd.setEnabled(true);
}
mTvNum.setText(Integer.toString(num));
addSubClickListener.addSubClickListener(num);
}
}
}
public interface AddSubClickListener {
void addSubClickListener(int num);
}
}
以上主要的自定义控件代码,下面是用到的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_add_sub_bg"
android:orientation="horizontal">
android:id="@+id/tv_sub"
android:layout_width="20dp"
android:layout_height="20dp"
android:gravity="center"
android:text="-" />
android:layout_width="1px"
android:layout_height="match_parent"
android:background="#666666" />
android:id="@+id/tv_num"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginLeft="-1px"
android:layout_marginRight="-1px"
android:layout_weight="1"
android:gravity="center"
android:text="1" />
android:layout_width="1px"
android:layout_height="match_parent"
android:background="#666666" />
android:id="@+id/tv_add"
android:layout_width="20dp"
android:layout_height="20dp"
android:gravity="center"
android:text="+" />
</LinearLayout>
用的的drawable文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FFFFFF" />
android:width="1px"
android:color="#666666" />
android:width="20dp"
android:height="20dp" />
<corners android:radius="4dp">
</shape>
样式表
<declare-styleable name="AddSubView">
<attr name="add_sub_width" format="dimension" />//加减快高
<attr name="add_sub_height" format="dimension" />
<attr name="sum_height" format="dimension" />//数目的快高
<attr name="sum_widthh" format="dimension" />
<attr name="max_sum" format="dimension" />//最大
<attr name="min_sum" format="dimension" />//最小
<attr name="isedit" format="boolean" />//是否可编辑
</declare-styleable>
好了,废话不多说,以上就是所有的代码,在使用的时候 的时候只需要跟正常自定义控件使用就OK了!