自定义View实现东购物车加减控件
来源:互联网 发布:上海培训公司java 编辑:程序博客网 时间:2024/05/22 08:11
1、自定义属性,控制加减按钮的大小
values文件夹下创建attrs文件
<declare-styleable name="AddSubView">
<attr name="add_sub_width" format="dimension"/>
<attr name="add_sub_height" format="dimension"/>
</declare-styleable>
2、定义边框背景 drawable中定义shape
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FFFFFF"/>
<stroke android:color="#666666" android:width="1px"/>
<size android:width="20dp" android:height="20dp"/>
</shape>
3、定义组合控件的布局
<?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="match_parent">
<TextView
android:id="@+id/tv_sub"
android:layout_width="20dp"
android:text="-"
android:background="@drawable/add_sub_bg"
android:gravity="center"
android:layout_height="20dp" />
<TextView
android:id="@+id/tv_num"
android:layout_width="20dp"
android:text="1"
android:layout_weight="1"
android:background="@drawable/add_sub_bg"
android:gravity="center"
android:layout_height="20dp" />
<TextView
android:id="@+id/tv_add"
android:layout_width="20dp"
android:text="+"
android:background="@drawable/add_sub_bg"
android:gravity="center"
android:layout_height="20dp" />
</LinearLayout>
4、具体代码如下
import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
public class AddSubView extends LinearLayout implements View.OnClickListener {
private int width;
private int height;
private TextView mTvAdd;
private TextView mTvSub;
private TextView mTvNum;
private boolean setMaxNum = false;
private boolean setMinNum = false;
private int maxNum = 0;
private int minNum = 0;
private AddSubClickListener addSubClickListener;
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);
height = typedArray.getDimensionPixelSize(R.styleable.AddSubView_add_sub_height, 20);
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);
LayoutParams numParams = new LayoutParams(LayoutParams.WRAP_CONTENT, height);
numParams.weight = 1;
mTvNum.setLayoutParams(numParams);
mTvSub.setOnClickListener(this);
mTvAdd.setOnClickListener(this);
}
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 < maxNum) {
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);
}
}
- 自定义View实现东购物车加减控件
- 购物车自定义加减控件
- 自定义view继承LinearLayout实现购物车数量的加减
- Android使用自定义View实现购物车的加减
- 自定义组合控件实现 购物车加减的简单实现
- 自定义控件之购物车数量加减
- Android实现购物车加减器控件
- 购物车加减控件
- Android——自定义View之购物车的加减
- 仿京东购物车加减数量的自定义View
- 购物车实现加减
- Android自定义控件之购物车数量加减器
- 初学者---Android 自定义控件之购物车数量加减器
- 购物车自定义加减按钮
- 购物车 自定义加减器
- 简易实现自定义购物加减器
- javascript实现购物车加减
- 自定义控件:实现加减功能
- Java
- MemcachedClient 使用说明
- uiautomator不能获取动态界面,闹钟怎么获取整个界面的数量
- Java native方法详解
- 第七周项目一
- 自定义View实现东购物车加减控件
- 老化负载带载逻辑
- MQ的使用场景
- Python 训练人脸识别模型(番外篇
- Android SparseArray源码分析
- 第七周 项目1
- echarts异步画k线图折线图
- angularjs--js函数用法Object.getOwnPropertyNames
- Sizeof与Strlen的区别与联系