购物车加减

购物车加减

这是效果图

如上图就是需要我们去实现的功能。

.这单个功能比较独立,而且一个界面如果到处写这样的小控件也麻烦不方便管理,再者不方便二次利用,所以我需要把他封装成一个控件

封装控件,也叫自定义控件有那些好处呢?


1.功能模块的完整性

2.可以更好的维护与扩展,

3.可以二次利用,不需要重复靠轮子

xml布局文件:

<!-- 整体布局,包括增加和减少商品数量的符号以及中间的商品数量 -->
<LinearLayout
    android:gravity="center"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <!-- 减少商品数量的布局 -->
    <Button
        android:id="@+id/addbt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#0157D3"
        android:text="-">
    </Button>
    <!-- 商品数量的布局 -->
    <EditText
        android:id="@+id/edt"
        android:text="0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </EditText>
    <!-- 增加商品数量的布局 -->
    <Button
        android:id="@+id/subbt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#0157D3"
        android:text="+">
    </Button>
    <!-- 显示商品数量的布局 -->
    <TextView
        android:id="@+id/ttt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </TextView>
</LinearLayout>
mainActivity类:

public class MainActivity extends AppCompatActivity {
    private Button btAdd, btReduce;
    private EditText edtNumber;
    int num = 0; //数量

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btAdd = (Button) findViewById(R.id.addbt);
        btReduce = (Button) findViewById(R.id.subbt);
        edtNumber = (EditText) findViewById(R.id.edt);
        btAdd.setTag("+");
        btReduce.setTag("-");
        //设置输入类型为数字
        edtNumber.setInputType(android.text.InputType.TYPE_CLASS_NUMBER);
        edtNumber.setText(String.valueOf(num));
        SetViewListener();
    }

    /**
     * 设置文本变化相关监听事件
     */
    private void SetViewListener() {
        btAdd.setOnClickListener((android.view.View.OnClickListener) new OnButtonClickListener());
        btReduce.setOnClickListener((android.view.View.OnClickListener) new OnButtonClickListener());
        edtNumber.addTextChangedListener(new OnTextChangeListener());
    }

    /**
     * 加减按钮事件监听器
     */
    class OnButtonClickListener implements android.view.View.OnClickListener {

        @Override
        public void onClick(View view) {
            String numString = edtNumber.getText().toString();
            if (numString == null || numString.equals("")) {
                num = 0;
                edtNumber.setText("0");
            } else {
                if (view.getTag().equals("-")) {
                    if (++num < 0) //先加,再判断
                    {
                        num--;
                        Toast.makeText(MainActivity.this, "请输入一个大于0的数字",
                                Toast.LENGTH_SHORT).show();
                    } else {
                        edtNumber.setText(String.valueOf(num));
                    }
                } else if (view.getTag().equals("+")) {
                    if (--num < 0) //先减,再判断
                    {
                        num++;
                        Toast.makeText(MainActivity.this, "请输入一个大于0的数字",
                                Toast.LENGTH_SHORT).show();
                    } else {
                        edtNumber.setText(String.valueOf(num));
                    }
                }
            }
        }
    }


    /**
     * EditText输入变化事件监听器
     */
    class OnTextChangeListener implements TextWatcher {
        @Override
        public void afterTextChanged(Editable s) {
            String numString = s.toString();
            if (numString == null || numString.equals("")) {
                num = 0;
            } else {
                int numInt = Integer.parseInt(numString);
                if (numInt < 0) {
                    Toast.makeText(MainActivity.this, "请输入一个大于0的数字",
                            Toast.LENGTH_SHORT).show();
                } else {
                    //设置EditText光标位置 为文本末端
                    edtNumber.setSelection(edtNumber.getText().toString().length());
                    num = numInt;
                }
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                                  int count) {
        }
    }
}
到这就完事了!