购物车加减
这是效果图
如上图就是需要我们去实现的功能。
.这单个功能比较独立,而且一个界面如果到处写这样的小控件也麻烦不方便管理,再者不方便二次利用,所以我需要把他封装成一个控件
封装控件,也叫自定义控件有那些好处呢?
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) { } } }到这就完事了!