安卓
Android是由Andy Rubin创立的一个手机操作系统,后来被Google收购。Gooole希望与各方面共同建立一个标准化的、开放式的移动电话软件平台,从而在移动产业形成一个开放式的操作平台。
界面编程
安卓常用的几种布局:线性布局(LineraLayout)、表格布局(Tablelayout)、帧布局(FrameLayout)、相对布局(RelativeLayout)等等。我这里用的是比较简单的“线性布局”。
布局文件(activity_main.xml):
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.zhaoxudong.calculatorapp.MainActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="0dp">
<EditText
android:layout_width="403dp"
android:layout_height="155dp"
android:id="@+id/result_Text"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CE"
android:id="@+id/CE"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DEL"
android:id="@+id/DEL"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SIN"
android:id="@+id/SIN"/>
<Button
android:layout_width="113dp"
android:layout_height="wrap_content"
android:text="COS"
android:id="@+id/COS"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="7"
android:id="@+id/number7"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="8"
android:id="@+id/number8"/>/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="9"
android:id="@+id/number9"/>/>
<Button
android:layout_width="117dp"
android:layout_height="wrap_content"
android:text="+"
android:id="@+id/add_but"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4"
android:id="@+id/number4"/>/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5"
android:id="@+id/number5"/>/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="6"
android:id="@+id/number6"/>/>
<Button
android:layout_width="117dp"
android:layout_height="wrap_content"
android:text="-"
android:id="@+id/sub_but"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:id="@+id/number1"/>/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:id="@+id/number2"/>/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3"
android:id="@+id/number3"/>/>
<Button
android:layout_width="116dp"
android:layout_height="wrap_content"
android:text="*"
android:id="@+id/mult_but"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="="
android:id="@+id/sign_but"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:id="@+id/number0"/>/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="."
android:id="@+id/spot_but"/>
<Button
android:layout_width="114dp"
android:layout_height="wrap_content"
android:text="/"
android:id="@+id/div_but"/>
</LinearLayout>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
逻辑部分
逻辑部分是由java代码实现,实践证明代码多练还是有好处的。
为了实现按钮的点击事件:
public class MainActivity extends Activity implements OnClikListener{}
对layout中的按钮进行定义:
private Button number0;
private Button number1;
private Button number2;
private Button number3;
private Button number4;
private Button number5;
private Button number6;
private Button number7;
private Button number8;
private Button number9;
/*
运算符
*/
private Button add_but;//加法
private Button sub_but;//减法
private Button mult_but;//乘法
private Button div_but;//除法
/*
等号
小数点
归零
*/
private Button sign_but;//等号
private Button spot_but;//小数点
private Button CE_but;//归零键
private Button DEL;
private Button SIN;
private Button COS;
/*
结果
*/
private EditText result;
private boolean clear_flag;//清空标识
对每个按钮进行实例化并且设置点击事件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
数字
*/
number0 = (Button) findViewById(R.id.number0);
number1 = (Button) findViewById(R.id.number1);
number2 = (Button) findViewById(R.id.number2);
number3 = (Button) findViewById(R.id.number3);
number4 = (Button) findViewById(R.id.number4);
number5 = (Button) findViewById(R.id.number5);
number6 = (Button) findViewById(R.id.number6);
number7 = (Button) findViewById(R.id.number7);
number8 = (Button) findViewById(R.id.number8);
number9 = (Button) findViewById(R.id.number9);
/*
运算符
*/
add_but = (Button) findViewById(R.id.add_but);
sub_but = (Button) findViewById(R.id.sub_but);
mult_but = (Button) findViewById(R.id.mult_but);
div_but = (Button) findViewById(R.id.div_but);
/*
等号
小数点
归零
*/
sign_but = (Button) findViewById(R.id.sign_but);//等号
spot_but = (Button) findViewById(R.id.spot_but);//小数点
CE_but = (Button) findViewById(R.id.CE);//归零
DEL = (Button) findViewById(R.id.DEL);
SIN=(Button) findViewById(R.id.SIN);
COS=(Button) findViewById(R.id.COS);
/*
结果
*/
result = (EditText) findViewById(R.id.result_Text);
/*
初始化事件
*/
number0.setOnClickListener(this);
number1.setOnClickListener(this);
number2.setOnClickListener(this);
number3.setOnClickListener(this);
number4.setOnClickListener(this);
number5.setOnClickListener(this);
number6.setOnClickListener(this);
number7.setOnClickListener(this);
number8.setOnClickListener(this);
number9.setOnClickListener(this);
add_but.setOnClickListener(this);
sub_but.setOnClickListener(this);
mult_but.setOnClickListener(this);
div_but.setOnClickListener(this);
sign_but.setOnClickListener(this);
spot_but.setOnClickListener(this);
CE_but.setOnClickListener(this);
DEL.setOnClickListener(this);
SIN.setOnClickListener(this);
COS.setOnClickListener(this);
}
下面是在onClick方法中实现逻辑运算:
这里使用的方法是使用以下代码获取EditText中的字符串
String str = result.getText().toString();
为了区分开数字和运算符,分别用s1、s2和op来表示数字和运算符
String s1 = exp.substring(0, exp.indexOf(" "));//运算符前面的字符串
String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);//截取到的运算符
String s2 = exp.substring(exp.indexOf(" ") + 3);//运算符后面的字符串
为了能够实现点击任意按钮可以出现对应的字符,使用以下代码可以获取Button中的内容
result.setText(str + " " + ((Button) v).getText() + " ");
通过判断出数字和运算符来进行运算,下面是逻辑运算全部的代码:
private void getResult() {
clear_flag = true;
String exp = result.getText().toString();
double result_1 = 0;
if(exp==null||exp.equals("")){
return;
}
if(!exp.contains(" ")){
return;
}
if (clear_flag){
clear_flag=false;
}
clear_flag=true;
String s1 = exp.substring(0, exp.indexOf(" "));//运算符前面的字符串
String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);//截取到的运算符
String s2 = exp.substring(exp.indexOf(" ") + 3);//运算符后面的字符串
if (!s1.equals("") && !s2.equals("")) {
double d1 = Double.parseDouble(s1);
double d2 = Double.parseDouble(s2);
if (op.equals("+")) {
result_1 = d1 + d2;
} else if (op.equals("-")) {
result_1 = d1 - d2;
} else if (op.equals("*")) {
result_1 = d1 * d2;
} else if (op.equals("/")) {
if (d2 == 0)
result_1 = 0;
result_1 = d1 / d2;
}
if (!s1.contains(".") && !s2.contains(".")&&!op.equals("/")) {
int r = (int) result_1;
result.setText(r + "");
} else {
result.setText(result_1 + "");
}
} else if (!s1.equals("") && s2.equals("")) {
result.setText(exp);
} else if (s1.equals("") && !s2.equals("")) {
double d2 = Double.parseDouble(s2);
if (op.equals("+")) {
result_1 = 0 + d2;
} else if (op.equals("-")) {
result_1 = 0 - d2;
} else if (op.equals("*")) {
result_1 = 0;
} else if (op.equals("/")) {
result_1 = 0;
}
} else {
result.setText("");
}
}
以上便是简单计算器的所有重要代码。
实现功能
- 支持加减乘除的基本运算
- 支持加减乘除后的再运算
- 支持浮点数运算
- 支持三角函数sin cos运算
- 支持数字删除
- 支持置零