前言
刚刚入门安卓开发不久,有一个任务开发计算器(我发现老师们都喜欢让开发这个,还有什么贪吃蛇、扫雷),最简单的计算器也有0-9以及+-/*.=这么多按钮,设置起来十分繁琐,而且维护起来不容易,就想到找解决方法。
主要解决java代码部分,xml界面不算繁琐而且也莫得办法
常规思路及问题
-
定义按钮变量
private Button btn_0,btn_1,btn_2,btn_3,btn_4,btn_5....btn_eva,btn_dot;按照xml的id值设立button
-
注册button变量
btn_0=findViewById(R.id.btn_0); btn_1=findViewById(R.id.btn_1); btn_2=findViewById(R.id.btn_2); ... -
绑定单击事件
使用Activity继承onClickListener()接口的方式设立点击事件
btn_0.setOnClickListener(this); btn_1.setOnClickListener(this); btn_2.setOnClickListener(this); ...
算上最少的键,也要有17个按钮,代码又长又乱。
改进1--使用数组
原理:
因为我们最终在重写onClick事件的时候需要是对不同id的按钮做出不同响应,可以直接通过view.getId()获取id,写case语句来分类处理。所以button变量其实并没有多大的作用,只是注册我们在xml里的按钮,只要所有id的button都注册了,就完成任务了。
通过把id放在一个数组里,建立button变量也直接建立数组
循环进行注册,并直接绑定设立单击事件监听
代码实例
private Button []buttons=new Button[16];//建立了包含16个button的buttons数组,因为当时漏了除法所以是16个了
private int []id=new int[]{
R.id.btn_9,R.id.btn_8,R.id.btn_7,R.id.btn_CE,
R.id.btn_6,R.id.btn_5,R.id.btn_4,R.id.btn_sub,
R.id.btn_3,R.id.btn_2,R.id.btn_1,R.id.btn_add,
R.id.btn_0,R.id.btn_dot,R.id.btn_mul,R.id.btn_eva
};//把id都放在id[]数组中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show=(TextView)findViewById(R.id.show);
for(int i=0;i<buttons.length;i++){
buttons[i]=(Button) findViewById(id[i]);
buttons[i].setOnClickListener(this);
}//循环进行绑定
}
处理点击事件只需使用case
switch (v.getId())
{
case R.id.btn_0:apd(show,'0',isEVA);break;
case R.id.btn_1:apd(show,'1',isEVA);break;
case R.id.btn_2:apd(show,'2',isEVA);break;
case R.id.btn_3:apd(show,'3',isEVA);break;
case R.id.btn_4:apd(show,'4',isEVA);break;
case R.id.btn_5:apd(show,'5',isEVA);break;
case R.id.btn_6:apd(show,'6',isEVA);break;
case R.id.btn_7:apd(show,'7',isEVA);break;
case R.id.btn_8:apd(show,'8',isEVA);break;
case R.id.btn_9:apd(show,'9',isEVA);break;
case R.id.btn_add:apd(show,'+',isEVA);break;
case R.id.btn_sub:apd(show,'-',isEVA);break;
case R.id.btn_mul:apd(show,'*',isEVA);break;
case R.id.btn_dot:apd(show,'.',isEVA);break;
}
改进2--使用动态生成view控件
其实..我还没看这种方法,有点困了,不过我有csdn博客地址(狗头)
总结
当然,方法一简单,但是方法二介绍了一种新思路,以后可能会用上,所以也总结了进去。如有问题可以留言提出。