Android利用布局实现伪自定义商品数量加减控件

应用场景

电子商城中购物数量的选择控件,点击改变数量或输入数量的伪自定义控件的实现。效果图如下:这个是本人修改后的可直接用于项目,感兴趣的可以下载源码

Android利用布局实现伪自定义商品数量加减控件_第1张图片
Android利用布局实现伪自定义商品数量加减控件_第2张图片

具体实现

简单粗暴,就是用布局写出控件的样式,+和- 准备的是两张图片(Imagebutton )中间的数字展示可以放EditText(可以实现用户自己输入,本文既是)也可以放一个TextView只能显示数字。在java逻辑部分处理这三个控件,来实现数量的加减。

布局Xml

<RelativeLayout
        android:background="@drawable/box"
        android:layout_centerInParent="true"
        android:layout_width="75dp"
        android:layout_height="15dp"
        >

        <ImageButton
            android:id="@+id/addbt"
            android:layout_centerVertical="true"
            android:layout_alignParentLeft="true"
            android:background="@drawable/minus"
            android:layout_width="15dp"
            android:layout_height="15dp"
            />
        <ImageButton
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:background="@drawable/plus"
            android:id="@+id/subbt"
            android:layout_width="15dp"
            android:layout_height="15dp"
            />

        <EditText
            android:id="@+id/edt"
            android:layout_width="45dp"
            android:layout_height="15dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:background="@android:color/transparent"
            android:gravity="center"
            android:text="0"
            android:textSize="12dp" >

            <requestFocus />
        EditText>

    RelativeLayout>

Java逻辑

处理ImageButton的点击事件

+逻辑:

+和-的点击事件
bt01.setOnClickListener(new OnButtonClickListener());
bt02.setOnClickListener(new OnButtonClickListener());
中间显示文字的改变监听
edt.addTextChangedListener(new OnTextChangeListener());

加减按钮事件监听器

    class OnButtonClickListener implements OnClickListener
    {
        @Override
        public void onClick(View v)
        {
        得到输入框里的数字
            String numString = edt.getText().toString();
            进行判断为空或是没文字设置为0
            if (numString == null || numString.equals(""))
            {
                num = 0;
                edt.setText("0");
            } else{
            当点击-的时候一次递减(num--)
                if (v.getTag().equals("-"))
            {
            判断(大于0的才能往下减)
                if (++num < 0)  //先加,再判断
                    {
                        num--;
    Toast.makeText(MainActivity.this, "请输入一个大于0的数字",
                                Toast.LENGTH_SHORT).show();
                    } else
                    {
                        edt.setText(String.valueOf(num));
                    }
                } else if (v.getTag().equals("+"))
                {
                判断(自减限制数不小于0if (--num < 0)  //先减,再判断
                    {
                        num++;
Toast.makeText(MainActivity.this, "不能小于0",0).show();
                    } else
                    {
                        edt.setText(String.valueOf(num));
                    }
                }
            }
        }
    }

EditText输入变化事件监听器:文字改变之后:小于0则提示用户,设置数字为0,不小于0直接设置数字(这里有一个优化要处理,就是购物的时候不可能选0,可以在判定条件中改为<=0,>=0即可)

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光标位置 为文本末端
                    edt.setSelection(edt.getText().toString().length());
                    num = numInt;

                }
            }
        }

源码下载

特别感谢网络上此方法Demo提供者。

你可能感兴趣的:(AndroidUI)