自己创建View和改变View

来源:互联网 发布:linux info命令 编辑:程序博客网 时间:2024/05/22 00:37

继承视图标签:

public class AddDelete extends LinearLayout{    EditText edtxt;    private OnAddDelete onadddelete;    public void setOnadddelete(OnAddDelete onadddelete) {        if(onadddelete!=null){            this.onadddelete = onadddelete;        }    }    interface OnAddDelete{   //接口,MainActivity中调用        void AddClick(View v);        void DelClick(View v);    }    public AddDelete(Context context) {        this(context,null);    }    public AddDelete(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public AddDelete(Context context, 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.layout_add_delete,this);        TextView tvadd = findViewById(R.id.text_add);        TextView tvdel = findViewById(R.id.text_delete);        edtxt = findViewById(R.id.etittxt);
//自定义View        TypedArray typearray = context.obtainStyledAttributes(attrs,R.styleable.AddDeleteStyle);   //attrs.xml中的<declare-styleable name="AddDeleteStyle">        String LeftText = typearray.getString(R.styleable.AddDeleteStyle_left_text);   //attr.xml中的format        tvdel.setText(LeftText);   //重新给标签赋值,赋属性        typearray.recycle();   //刷新//自定义View
        tvadd.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View view) {                onadddelete.AddClick(view);            }        });        tvdel.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View view) {                onadddelete.DelClick(view);            }        });    }    public void setNumber(int number){    //不关心        if(number>0){            edtxt.setText(""+number);        }    }    public int getNumber(){   //不关心        int number = 0;        try{            String st = edtxt.getText().toString().trim();            number = Integer.valueOf(st);        }catch (Exception e){            number = 0;        }        return number;    }}

MainActivity的东西:

public class MainActivity extends AppCompatActivity {    AddDelete ad;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ad = (AddDelete) findViewById(R.id.adddelet);        ad.setOnadddelete(new AddDelete.OnAddDelete() {            @Override            public void AddClick(View v) {                int number = ad.getNumber();                number++;                ad.setNumber(number);            }            @Override            public void DelClick(View v) {                int number = ad.getNumber();                number--;                ad.setNumber(number);            }        });    }}


自定义View:

values文件夹中:attrs.xml文件:

<resources>    <declare-styleable name="AddDeleteStyle">        <attr name="left_text" format="string"></attr>        <attr name="left_text_color" format="color"></attr>    </declare-styleable></resources>

Main视图中:

加入:

xmlns:app="http://schemas.android.com/apk/res-auto"
在下边标签中:
app:left_text="减"(此类型用来改变标签的属性,和values文件夹中的xml文件联系到一块)