最终效果图
首先是创建一个空的项目,创建一个Empty Activity,具体操作在日志一有说。
有的颜色代码可能会因为没有而报错,我们需要在colors.xml中添加代码
#3F51B5
#303F9F
#FF4081
#00000000
#232222
#645d5d
#FFFFFF
#FFFFF0
#FFFFE0
#FFFF00
#FFFAFA
#FFFAF0
#FFFACD
#FFF8DC
#FFF5EE
#FFF0F5
#FFEFD5
#FFEBCD
#FFE4E1
#FFE4C4
#FFE4B5
#FFDEAD
#FFDAB9
#FFD700
#FFC0CB
#FFB6C1
#FFA500
#FFA07A
#FF8C00
#FF7F50
#FF69B4
#FF6347
#FF4500
#FF1493
#FF00FF
#FF0000
#FDF5E6
#FAFAD2
#FAF0E6
#FAEBD7
#FA8072
#F8F8FF
#F5FFFA
#F5F5F5
#F5F5DC
#F5DEB3
#F4A460
#F0FFFF
#F0FFF0
#F0F8FF
#F0E68C
#F08080
#EEE8AA
#EE82EE
#E9967A
#E6E6FA
#E0FFFF
#DEB887
#DDA0DD
#DCDCDC
#DC143C
#DB7093
#DAA520
#DA70D6
#D8BFD8
#D3D3D3
#D2B48C
#D2691E
#CD853F
#CD5C5C
#C71585
#C0C0C0
#BDB76B
#BC8F8F
#BA55D3
#B8860B
#B22222
#B0E0E6
#B0C4DE
#AFEEEE
#ADFF2F
#ADD8E6
#A9A9A9
#A52A2A
#A0522D
#9932CC
#98FB98
#9400D3
#9370DB
#90EE90
#8FBC8F
#8B4513
#8B008B
#8B0000
#8A2BE2
#87CEFA
#87CEEB
#808080
#808000
#800080
#800000
#7FFFD4
#7FFF00
#7CFC00
#7B68EE
#778899
#708090
#6B8E23
#6A5ACD
#696969
#66CDAA
#6495ED
#5F9EA0
#556B2F
#4B0082
#48D1CC
#483D8B
#4682B4
#4169E1
#40E0D0
#3CB371
#32CD32
#2F4F4F
#2E8B57
#228B22
#20B2AA
#1E90FF
#191970
#00FFFF
#00FFFF
#00FF7F
#00FF00
#00FA9A
#00CED1
#00BFFF
#008B8B
#008080
#008000
#006400
#0000FF
#0000CD
#00008B
#000080
#000000
#99cc33
#cccccc
#8f8f8f
清除
(实现功能代码是参考他人改的,增添了很多我的注释,基本新代码都注释了,如有理解错误,请指出)
package com.example.test3;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import java.util.LinkedList;
import java.util.List;
public class MainActivity extends Activity {
private final String TAG = "MainActivity";
private final int STATE_INIT=0; //输入第一个数字
private final int STATE_EDITING=1; //数字编辑阶段
private final int STATE_RESULT=2; //返回结果状态 不可以对数字修改 只可以进行运算 或重新开始一次新的运算
List list;
private int state; //输入框的状态
private double result;
private double cacheCount;
char operate;
TextView tv_display;
StringBuffer sb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //显示
init();
}
/**
* 程序初始化
*/
private void init(){
tv_display=(TextView)findViewById(R.id.tv_display); //电子屏显示(即数字显示)
list=new LinkedList(); //重构,链表List只存储StringBuffer类型,StringBuffer是String的升级
result=0;
cacheCount=0;
operate='+';
state=STATE_INIT;
sb=new StringBuffer(); //创建对象实例
tv_display.setText(sb); //显示屏显示
}
public void onClick(View v){
switch (v.getId()){
case R.id.bt_0: //button 0
updateData('0');
break;
case R.id.bt_1:
updateData('1');
break;
case R.id.bt_2:
updateData('2');
break;
case R.id.bt_3:
updateData('3');
break;
case R.id.bt_4:
updateData('4');
break;
case R.id.bt_5:
updateData('5');
break;
case R.id.bt_6:
updateData('6');
break;
case R.id.bt_7:
updateData('7');
break;
case R.id.bt_8:
updateData('8');
break;
case R.id.bt_9:
updateData('9');
break;
case R.id.bt_point:
updateData('.');
break;
/*case R.id.bt_delete: //退一格
updateData('d');
break; */
case R.id.bt_add:
updateData('+');
break;
case R.id.bt_minus:
updateData('-');
break;
case R.id.bt_multiply:
updateData('*');
break;
case R.id.bt_dividi:
updateData('/');
break;
case R.id.bt_equal:
updateData('=');
break;
case R.id.tv_init: //清屏
init();
break;
}
}
/**
* 每通过按钮 传入该方法一个字符
* 实现对数据的更新
*/
public void updateData(char ch){
if ((ch<='9'&& ch>='0')||ch=='.'){
sb.append(ch); //append方法的作用是在一个StringBuffer对象后面追加字符串,这里即在显示屏显示的sb后再+一个数,如9+7为97
tv_display.setText(sb);
}
switch (ch){
case 'd': //删除,退一位
if (sb.length()==0)
break;
sb.deleteCharAt(sb.length() - 1); //用来删除StringBuffer字符串指定索引字符的方法
tv_display.setText(sb);
break;
case '+':
if(sb.length()==0){
init();
break;
}
cacheCount=Double.parseDouble(sb.toString()); //把数字类型的字符串,转换成double类型
operator(); //调用运算方法
operate='+';
break;
case '-':
if(sb.length()==0){
init();
break;
}
cacheCount=Double.parseDouble(sb.toString());
operator();
operate='-';
break;
case '*':
if(sb.length()==0){
init();
break;
}
cacheCount=Double.parseDouble(sb.toString());
operator();
operate='*';
break;
case '/':
if(sb.length()==0){
init();
break;
}
cacheCount=Double.parseDouble(sb.toString());
operator();
operate='/';
break;
case '=':
if(sb.length()==0){
init();
break;
}
cacheCount=Double.parseDouble(sb.toString());
operator();
operate='+';
cacheCount=0;
result=0;
break;
}
Log.d(TAG,cacheCount+"#"+result);
}
private void operator(){ //运算方法
String str;
switch (operate){
case '+':
result+=cacheCount; //cacheCount是上述变成double型的数
str= String.valueOf(result); //把result转换成Double类型,在返回的时候new Double(),所以返回的是Double
sb=new StringBuffer();
// state=STATE_RESULT;
tv_display.setText(str);
break;
case '-':
result-=cacheCount;
str=String.valueOf(result);
sb=new StringBuffer();
// state=STATE_RESULT;
tv_display.setText(str);
break;
case '/':
if(cacheCount==0){
tv_display.setText("除零错误");
init();
break;
}
result/=cacheCount;
str=String.valueOf(result);
sb=new StringBuffer();
// state=STATE_RESULT;
tv_display.setText(str);
break;
case '*':
result*=cacheCount;
str=String.valueOf(result);
sb=new StringBuffer();
// state=STATE_RESULT;
tv_display.setText(str);
break;
case '=':
result+=cacheCount;
str= String.valueOf(result);
sb=new StringBuffer();
// state=STATE_RESULT;
tv_display.setText(str);
cacheCount=0;
result=0;
break;
}
}
}
附上AndroidManifest.xml文件代码