您的位置:首页 > 移动开发 > Android开发

Android基础知识(简单实例计算器)

2016-07-23 23:48 507 查看

 Android基础知识(简单实例计算器)

在做这个计算器的时候,我认为主要分为两部分:界面设计,功能实现。



(效果图)

界面设计:

其实界面设计和功能实现是相互联系在一起的,我界面怎么去设计,功能就要去怎么实现。

1、控件:界面有19个按钮,数字1-9和小数点、加减乘除、清空回退、百分比、等号,还有一个显示内容的文本框。实现起来十分简单只要拖动到xml中即可。

2、布局设计:刚拖进来的控件都摆放得比较凌乱,需要对其调整,本案例中,我会使用LinearLayout对界面进行布局。

3、样式:有背景颜色、边框线颜色、圆角。

接下来先看样式文件:



简单说明一下:
gradient   -- 对应颜色渐变。 startcolor、endcolor就不多说了。android:angle 是指从哪个角度开始变。
solid      --  填充。
stroke  --  描边。
corners  --  圆角。
padding   -- 定义内容离边界的距离。 与android:padding_left、android:padding_right这些是一个道理。
先介绍white_bg.xml,也就是显示内容的文本框的样式文件:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--圆角-->
<corners android:radius="5dp" />
<!--边框线-->
<stroke
android:width="1dp"
android:color="#000" />
<!--填充-->
<solid android:color="#FFF" />
</shape>


接下来介绍白色键的样式文件white_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<pre name="code" class="html">  <item android:drawable="@drawable/white_bg" />
 <item android:drawable="@drawable/gray_bg" android:state_pressed="true" />
</selector>


第一个item是调用上一个样式white_bg.xm为默认情况下的样式第二个item是调用了gray_bg.xml样式文件,根据其android:state_pressed="true"属性,意为点击时的样式。

<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dp" />
<solid android:color="#ccc" />
</shape>


接下来介绍白色键的样式文件orange_selector.xml

<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/ashen" android:state_pressed="true" />
<item android:drawable="@drawable/orange_bg" />

</selector>


第一个item是调用了ashen.xml样式文件,根据其android:state_pressed="true"属性,意为点击时的样式。

<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dp" />
<solid android:color="#F5F5F5" />
</shape>


第二个item是调用样式orange_bg.xm为默认情况下的样式:

<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dp" />
<solid android:color="#FF6100" />
</shape>



在activity_main.xml的空间中分别去调用 white_bgwhite_selectororange_selector

功能实现:

在实现功能前,先要分清楚他们之间的关系:

1、数字0-9和小数点

2、加减乘除

3、清除与回删键

4、等号

5、百分比

public class MainActivity extends Activity implements View.OnClickListener {
Button btn_0, btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9; //数字0-9
Button btn_dian; //小数点

Button btn_C, btn_del;  //清除和回删

Button btn_yu; //求余
Button btn_chu; //除法
Button btn_cheng; //乘法
Button btn_jia;  //加法
Button btn_jian; //减法
Button btn_deng;  //等于

EditText input;//显示内容文本框

boolean clear_ed; //是否情况文本框

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_C = (Button) findViewById(R.id.btn_C);
btn_del = (Button) findViewById(R.id.btn_del);
btn_yu = (Button) findViewById(R.id.btn_yu);
btn_chu = (Button) findViewById(R.id.btn_chu);
btn_cheng = (Button) findViewById(R.id.btn_cheng);
btn_jia = (Button) findViewById(R.id.btn_jia);
btn_jian = (Button) findViewById(R.id.btn_jian);
btn_deng = (Button) findViewById(R.id.btn_deng);
btn_dian = (Button) findViewById(R.id.btn_dian);
btn_9 = (Button) findViewById(R.id.btn_9);
btn_8 = (Button) findViewById(R.id.btn_8);
btn_7 = (Button) findViewById(R.id.btn_7);
btn_6 = (Button) findViewById(R.id.btn_6);
btn_5 = (Button) findViewById(R.id.btn_5);
btn_4 = (Button) findViewById(R.id.btn_4);
btn_3 = (Button) findViewById(R.id.btn_3);
btn_2 = (Button) findViewById(R.id.btn_2);
btn_1 = (Button) findViewById(R.id.btn_1);
btn_0 = (Button) findViewById(R.id.btn_0);
input = (EditText) findViewById(R.id.input);

btn_0.setOnClickListener(this);
btn_1.setOnClickListener(this);
btn_2.setOnClickListener(this);
btn_3.setOnClickListener(this);
btn_4.setOnClickListener(this);
btn_5.setOnClickListener(this);
btn_6.setOnClickListener(this);
btn_7.setOnClickListener(this);
btn_8.setOnClickListener(this);
btn_9.setOnClickListener(this);

btn_yu.setOnClickListener(this);
btn_chu.setOnClickListener(this);
btn_cheng.setOnClickListener(this);
btn_jia.setOnClickListener(this);
btn_jian.setOnClickListener(this);
btn_deng.setOnClickListener(this);
btn_dian.setOnClickListener(this);

btn_C.setOnClickListener(this);
btn_del.setOnClickListener(this);

}

@Override
public void onClick(View v) {
String str = input.getText().toString();
if (str.equals("0")) {
str = "";
}

switch (v.getId()) {
case R.id.btn_0:
case R.id.btn_1:
case R.id.btn_2:
case R.id.btn_3:
case R.id.btn_4:
case R.id.btn_5:
case R.id.btn_6:
case R.id.btn_7:
case R.id.btn_8:
case R.id.btn_9:
case R.id.btn_dian:

if (clear_ed) {
clear_ed = false;
str = "";
input.setText("0");  //重置为0
}
input.setText(str + ((Button) v).getText());  //根据按钮的setText来添加数字
break;
case R.id.btn_jia:
case R.id.btn_jian:
case R.id.btn_cheng:
case R.id.btn_chu:
input.setText(str + " " + ((Button) v).getText() + " ");  //为区分加减乘除和数字 特意留了空格为间隔,
break;

case R.id.btn_C:
input.setText("0");  //重置为0
break;

case R.id.btn_del:

if (input.length() <= 1 || input.getText().toString().equals("")) {
input.setText("0");
} else {
input.setText(str.substring(0, str.length() - 1));  // 删除末尾一个数  由0开始 到str长度减1.
}
break;

case R.id.btn_deng:
getResult();
break;

case R.id.btn_yu:
Double d3 = Double.parseDouble(str);
Double d4 = d3 * 0.01;
input.setText(d4 + "");
break;
}

}

private void getResult() {
String exp = input.getText().toString();
if (exp == null || exp.equals("")) {  //如果exp为空的话结束
return;
}
if (!exp.contains(" ")) {//如果exp没有为预算法预留的“空格”的话结束
return;
}

clear_ed = true;

double result = 0;
String s1 = exp.substring(0, exp.indexOf(" ")); //定义s1的内容是 运算符前的那串数字
String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);//运算符
String s2 = exp.substring(exp.indexOf(" ") + 3); //定义s2的内容是 运算符前的那串数字

System.out.println(s1);
System.out.println(op);
System.out.println(s2);

if (!s1.equals("") && !s2.equals("")) {    //分四种情况来写,s1 s2都不为null。s1 为null,s2不为。s1不为,s2为空。s12都为空的
double d1 = Double.parseDouble(s1);  //转化为double型
double d2 = Double.parseDouble(s2);

if (op.equals("+")) {        //加法运算
result = d1 + d2;
} else if (op.equals("-")) { //减法运算
result = d1 - d2;
} else if (op.equals("×")) { //乘法运算
result = d1 * d2;
} else if (op.equals("÷")) { //除法运算
if (d2 == 0) {  //如果分母为0,那么结果为0
result = 0;
} else {
result = d1 / d2;
}
}
//将算好了的结果,再根据是否包含小数点来 决定输出的结果类型:整型还是双精度型
if (!s1.contains(".") && !s2.contains(".")) {  //如果s1、s2都不包含小数点,那么他们是整型
int r = (int) result; //转化为int型
input.setText(r + "");
} else {
input.setText(result + "");
}
} else if (!s1.equals("") && s2.equals("")) { //如果s1不为空,s2为空
input.setText(exp); //结果不作处理,原样输出
} else if (s1.equals("") && s2.equals("")) { //都为空
input.setText(exp); //结果不作处理,原样输出
} else if (s1.equals("") && !s2.equals("")) { //如果s1为空,s2不为空

double d2 = Double.parseDouble(s2);

if (op.equals("+")) {        //加法运算
result = 0 + d2;
} else if (op.equals("-")) { //减法运算
result = 0 - d2;
} else if (op.equals("×")) { //乘法运算
result = 0;
} else if (op.equals("÷")) { //除法运算
result = 0;
}

//将算好了的结果,再根据是否包含小数点来 决定输出的结果类型:整型还是双精度型
if (!s2.contains(".")) {  //如果s1、s2都不包含小数点,那么他们是整型
int r = (int) result; //转化为int型
input.setText(r + "");
} else {
input.setText(result + "");
}
}
}
}


后期再添加些注释,先偷会懒。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 计算器