• day16


    自定义控件的学习,设计一个购物车内的数量的加减控制

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    
        android:gravity="center_horizontal"
        android:background="@drawable/selector_number_add_sub">
    
    
    
        <Button
            android:id="@+id/btn_sub"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:background="@drawable/car_btn"
            android:textColor="@color/black"
            android:text="-"/>
    
        <TextView
            android:id="@+id/etxt_num"
            android:layout_width="70dp"
            android:layout_height="wrap_content"
            android:textColor="@color/black"
            android:minWidth="100dp"
    
            android:gravity="center"/>
    
        <Button
            android:id="@+id/btn_add"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:background="@drawable/car_btn"
            android:textColor="@color/black"
            android:text="+"/>
    
    
    
    </LinearLayout>
    widet_num_add_sub

    第一是布局是两个button实现加减功能,第二是中间设计一个Textview用来显示数字

    代码实现功能,设计理念——对两个button设置监听事件,然后对textview的text设置数字

    package Home.widget;
    
    import android.annotation.SuppressLint;
    import android.annotation.TargetApi;
    import android.content.Context;
    import android.graphics.drawable.Drawable;
    import android.os.Build;
    import androidx.appcompat.widget.TintTypedArray;
    import android.text.InputType;
    import android.util.AttributeSet;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.Button;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import com.example.expressdelivery.R;
    
    
    
    public class NumberAddSubView extends LinearLayout implements View.OnClickListener {
    
    
        public static final String TAG="NumberAddSubView";
        public static final int DEFUALT_MAX=100;
    
        private TextView mEtxtNum;
        private Button mBtnAdd;
        private Button mBtnSub;
    
        private OnButtonClickListener onButtonClickListener;
    
    
    
    
        private LayoutInflater mInflater;
    
    
        private  int value;
        private int minValue;
        private int maxValue=DEFUALT_MAX;
    
    
    
        public NumberAddSubView(Context context) {
            this(context, null);
        }
    
        public NumberAddSubView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        @SuppressLint("RestrictedApi")
        public NumberAddSubView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
    
            mInflater = LayoutInflater.from(context);
            initView();
            if(attrs!=null)
            {
                @SuppressLint("RestrictedApi") TintTypedArray a=TintTypedArray.obtainStyledAttributes(context,attrs,R.styleable.NumberAddSubView,defStyleAttr,0);
                @SuppressLint("RestrictedApi") int val =  a.getInt(R.styleable.NumberAddSubView_value,0);
                setValue(val);
    
                @SuppressLint("RestrictedApi") int maxVal = a.getInt(R.styleable.NumberAddSubView_maxValue,0);
                if(maxVal!=0)
                    setMaxValue(maxVal);
    
                @SuppressLint("RestrictedApi") int minVal = a.getInt(R.styleable.NumberAddSubView_minValue,0);
                setMinValue(minVal);
    
                @SuppressLint("RestrictedApi") Drawable etBackground = a.getDrawable(R.styleable.NumberAddSubView_editBackground);
                if(etBackground!=null)
                    setEditTextBackground(etBackground);
    
    
                @SuppressLint("RestrictedApi") Drawable buttonAddBackground = a.getDrawable(R.styleable.NumberAddSubView_buttonAddBackgroud);
                if(buttonAddBackground!=null)
                    setButtonAddBackgroud(buttonAddBackground);
    
                @SuppressLint("RestrictedApi") Drawable buttonSubBackground = a.getDrawable(R.styleable.NumberAddSubView_buttonSubBackgroud);
                if(buttonSubBackground!=null)
                    setButtonSubBackgroud(buttonSubBackground);
    
    
    
    
                a.recycle();
            }
    
    
        }
    
    
        private void initView(){
    
    
    
            View view = mInflater.inflate(R.layout.widet_num_add_sub,this,true);
    
            mEtxtNum = (TextView) view.findViewById(R.id.etxt_num);
            mEtxtNum.setInputType(InputType.TYPE_NULL);
            mEtxtNum.setKeyListener(null);
    
    
    
            mBtnAdd = (Button) view.findViewById(R.id.btn_add);
            mBtnSub = (Button) view.findViewById(R.id.btn_sub);
    
            mBtnAdd.setOnClickListener(this);
            mBtnSub.setOnClickListener(this);
    
    
    
        }
    
    
        @Override
        public void onClick(View v) {
            if(v.getId() == R.id.btn_add){
    
                numAdd();
    
                if(onButtonClickListener !=null){
                    onButtonClickListener.onButtonAddClick(v,this.value);
                }
            }
            else if(v.getId()==R.id.btn_sub){
                    numSub();
                if(onButtonClickListener !=null){
                    onButtonClickListener.onButtonSubClick(v,this.value);
                }
    
            }
        }
    
    
        private void numAdd(){
    
    
            getValue();
    
            if(this.value<=maxValue)
                this.value=+this.value+1;
    
            mEtxtNum.setText(value+"");
        }
    
    
        private void numSub(){
    
    
            getValue();
    
            if(this.value>minValue)
                this.value=this.value-1;
    
            mEtxtNum.setText(value+"");
        }
    
    
        public int getValue(){
    
            String value = mEtxtNum.getText().toString();
    
            if(value !=null && !"".equals(value))
                this.value = Integer.parseInt(value);
    
            return this.value;
        }
    
        public void setValue(int value) {
            mEtxtNum.setText(value+"");
            this.value = value;
        }
    
    
    
    
        public void setMaxValue(int maxValue) {
            this.maxValue = maxValue;
        }
    
        public void setMinValue(int minValue) {
            this.minValue = minValue;
        }
    
    
        public void setEditTextBackground(Drawable drawable){
    
            mEtxtNum.setBackgroundDrawable(drawable);
    
        }
    
    
        public void setEditTextBackground(int drawableId){
    
          setEditTextBackground(getResources().getDrawable(drawableId));
    
        }
    
    
        @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
        public void setButtonAddBackgroud(Drawable backgroud){
            this.mBtnAdd.setBackground(backgroud);
        }
    
    
        @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
        public void setButtonSubBackgroud(Drawable backgroud){
            this.mBtnSub.setBackground(backgroud);
        }
    
    
        public void setOnButtonClickListener(OnButtonClickListener onButtonClickListener) {
            this.onButtonClickListener = onButtonClickListener;
        }
    
        public interface  OnButtonClickListener{
    
            public void onButtonAddClick(View view, int value);
            public void onButtonSubClick(View view, int value);
    
        }
    
    
    }
  • 相关阅读:
    生成唯一流水码
    搜索类
    数字转中文
    字符串转数组工具类
    类转换
    P1112 区间连续段
    P1113 同颜色询问
    Turtlebot3 机器学习
    Turtlebot2进阶教程
    turtlebot A2
  • 原文地址:https://www.cnblogs.com/chenaiiu/p/13532423.html
Copyright © 2020-2023  润新知