本文已参与「新人创作礼」活动,一起开启掘金创作之路。
在安卓开发中关于商城的APP经常会有购物车的功能,对于物品的加减按钮也是会经常用到的,所以我就把他封装了一下弄成了一个工具类,这样每次使用的使用的时候直接使用封装好的控件就行了,这样提高了开发效率。
//工具类
public class ShopCar extends LinearLayout{
private OnShopCarClickListener listener;
private EditText ed_number;
private String numberStr;
public void OnShopCarClickListener(OnShopCarClickListener listener) {
if(listener!=null){
this.listener = listener;
}
}
public interface OnShopCarClickListener{
void onAddClick(View v);
void onDelClick(View v);
}
public ShopCar(Context context) {
this(context,null);
}
public ShopCar(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public ShopCar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context, attrs, defStyleAttr);
}
private void initView(Context context, AttributeSet attrs, int defStyleAttr) {
View.inflate(context, R.layout.item_add_cut,this);
Button btn_add=findViewById(R.id.btn_add);
Button btn_cut=findViewById(R.id.btn_cut);
ed_number=findViewById(R.id.et_number);
//styleable.AddDeleteViewStyle它是attrs里的样式
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddDeleteViewStyle);
String left_text = typedArray.getString(R.styleable.AddDeleteViewStyle_left_text);
String middle_text = typedArray.getString(R.styleable.AddDeleteViewStyle_middle_text);
String right_text = typedArray.getString(R.styleable.AddDeleteViewStyle_right_text);
btn_cut.setText(left_text);
btn_add.setText(right_text);
ed_number.setText(middle_text);
//释放资源
typedArray.recycle();
btn_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
listener.onAddClick(view);
}
});
btn_cut.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
listener.onDelClick(view);
}
});
}
/**
* 对外提供设置EditText值的方法
*/
public void setNumber(int number){
if (number>=0){
ed_number.setText(number+"");
}
}
/**
* 得到控件原来的值
*/
public int getNumber(){
int number = 0;
try {
numberStr = ed_number.getText().toString().trim();
number = Integer.valueOf(numberStr);
} catch (Exception e) {
number = 0;
}
return number;
}
}
styleable样式:values目录下新建attrs
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="AddDeleteViewStyle">
<attr name="left_text" format="string"/>
<attr name="right_text" format="string"/>
<attr name="middle_text" format="string"/>
</declare-styleable>
</resources>
//布局引用
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<Button
android:id="@+id/btn_cut"
android:layout_width="50dp"
android:layout_height="50dp"
android:text="-"
android:textSize="20dp"
android:background="@android:color/holo_purple"
/>
<EditText
android:id="@+id/et_number"
android:layout_width="50dp"
android:inputType="number"
android:layout_height="wrap_content"
android:gravity="center"
/>
<Button
android:id="@+id/btn_add"
android:layout_width="50dp"
android:layout_height="50dp"
android:text="+"
android:textSize="20dp"
android:background="@android:color/holo_purple"
/>
</LinearLayout>
</LinearLayout>
代码实现
num.OnShopCarClickListener(new ShopCar.OnShopCarClickListener() {
@Override
public void onAddClick(View v) {
int number = num.getNumber();
number++;
num.setNumber(number);
}
@Override
public void onDelClick(View v) {
int number = num.getNumber();
number--;
num.setNumber(number);
}
});