移动运用开发—计算器
利用Android studio设计一个简单的计算器
项目结构
页面布局
activity_main.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="411dp"
android:id="@+id/linear"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
android:background="#000000" >
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="69dp"
android:text="计算器"
android:gravity="center"
android:textAllCaps="false"
android:textColor="#1D87E3"
android:textSize="48sp" />
<EditText
android:id="@+id/editTextTextPersonName"
android:layout_width="411dp"
android:layout_height="176dp"
android:ems="10"
android:inputType="textPersonName"
android:textColor="#0BA7E4"
android:textSize="48sp"
tools:ignore="TouchTargetSizeCheck,SpeakableTextPresentCheck"/>
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow
android:layout_width="320dp"
android:layout_height="80dp">
<Button
android:id="@+id/AC"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="AC"
android:textSize="30sp" />
<Button
android:id="@+id/jiajian"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="/"
android:textSize="30sp" />
<Button
android:id="@+id/quyu"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="%"
android:textSize="30sp" />
<Button
android:id="@+id/chu"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="÷"
android:textSize="30sp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/but7"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="7"
android:textSize="30sp" />
<Button
android:id="@+id/but8"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="8"
android:textSize="30sp" />
<Button
android:id="@+id/but9"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="9"
android:textSize="30sp" />
<Button
android:id="@+id/cheng"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="x"
android:textSize="30sp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/but4"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="4"
android:textSize="30sp" />
<Button
android:id="@+id/but5"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="5"
android:textSize="30sp" />
<Button
android:id="@+id/but6"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="6"
android:textSize="30sp" />
<Button
android:id="@+id/jian"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="-"
android:textSize="30sp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/but1"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="1"
android:textSize="30sp" />
<Button
android:id="@+id/but2"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="2"
android:textSize="30sp" />
<Button
android:id="@+id/but3"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="3"
android:textSize="30sp" />
<Button
android:id="@+id/jia"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="+"
android:textSize="30sp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/but0"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="0"
android:layout_span="2"
android:textSize="30sp" />
<Button
android:id="@+id/dian"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="."
android:textSize="30sp" />
<Button
android:id="@+id/dengyu"
android:layout_width="102dp"
android:layout_height="80dp"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:text="="
android:textSize="30sp" />
</TableRow>
</TableLayout>
</LinearLayout>
代码文件
MainActivity.java如下:
package com.example.myapplicationtest;
import androidx.appcompat.app.AppCompatActivity;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private LinearLayout linear;
private TextView textView2;
private EditText editTextTextPersonName;
private Button AC;
private Button jiajian;
private Button quyu;
private Button chu;
private Button cheng;
private Button jian;
private Button jia;
private Button dian;
private Button dengyu;
private Button but0;
private Button but1;
private Button but2;
private Button but3;
private Button but4;
private Button but5;
private Button but6;
private Button but7;
private Button but8;
private Button but9;
boolean clr_flag; //判断编辑文本是否为0
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//建立联系
linear = (LinearLayout) findViewById(R.id.linear);
textView2 = (TextView) findViewById(R.id.textView2);
editTextTextPersonName = (EditText) findViewById(R.id.editTextTextPersonName);
AC = (Button) findViewById(R.id.AC);
jiajian = (Button) findViewById(R.id.jiajian);
quyu = (Button) findViewById(R.id.quyu);
chu = (Button) findViewById(R.id.chu);
cheng = (Button) findViewById(R.id.cheng);
jian = (Button) findViewById(R.id.jian);
jia = (Button) findViewById(R.id.jia);
dian = (Button) findViewById(R.id.dian);
dengyu = (Button) findViewById(R.id.dengyu);
but0 = (Button) findViewById(R.id.but0);
but1 = (Button) findViewById(R.id.but1);
but2 = (Button) findViewById(R.id.but2);
but3 = (Button) findViewById(R.id.but3);
but4 = (Button) findViewById(R.id.but4);
but5 = (Button) findViewById(R.id.but5);
but6 = (Button) findViewById(R.id.but6);
but7 = (Button) findViewById(R.id.but7);
but8 = (Button) findViewById(R.id.but8);
but9 = (Button) findViewById(R.id.but9);
//设置监听
linear.setOnClickListener(this);
textView2.setOnClickListener(this);
editTextTextPersonName.setOnClickListener(this);
AC.setOnClickListener(this);
jiajian.setOnClickListener(this);
quyu.setOnClickListener(this);
chu.setOnClickListener(this);
cheng.setOnClickListener(this);
jian.setOnClickListener(this);
jia.setOnClickListener(this);
dian.setOnClickListener(this);
dengyu.setOnClickListener(this);
but0.setOnClickListener(this);
but1.setOnClickListener(this);
but2.setOnClickListener(this);
but3.setOnClickListener(this);
but4.setOnClickListener(this);
but5.setOnClickListener(this);
but6.setOnClickListener(this);
but7.setOnClickListener(this);
but8.setOnClickListener(this);
but9.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String str = editTextTextPersonName.getText().toString();
switch (v.getId()) {
case R.id.but0:
case R.id.but1:
case R.id.but2:
case R.id.but3:
case R.id.but4:
case R.id.but5:
case R.id.but6:
case R.id.but7:
case R.id.but8:
case R.id.but9:
case R.id.dian:
// if (clr_flag) {
// clr_flag = false;
// str = "";
// editTextTextPersonName.setText("");
// }
// editTextTextPersonName.setText(str + ((Button) v).getText());
// break;
if (clr_flag) {
clr_flag = false;
str = "";
editTextTextPersonName.setText("");
}
editTextTextPersonName.setText(str + ((Button) v).getText());
break;
case R.id.jia:
case R.id.jian:
case R.id.cheng:
case R.id.chu:
case R.id.quyu:
case R.id.jiajian:
if (clr_flag) {
clr_flag = false;
str = "";
editTextTextPersonName.setText("");
}
if (str.contains("+") || str.contains("-") || str.contains("×") || str.contains("÷") || str.contains("%") || str.contains("/")) {
str = str.substring(0, str.indexOf(" "));
}
editTextTextPersonName.setText(str + " " + ((Button) v).getText() + " ");
break;
case R.id.AC: //清除
if (clr_flag)
clr_flag = false;
str = "";
editTextTextPersonName.setText("");
break;
case R.id.dengyu: //单独运算最后结果
getResult();//调用下面的方法
break;
}
}
private void getResult() {
String exp = editTextTextPersonName.getText().toString();
if (exp == null || exp.equals("")) return;
//因为没有运算符所以不用运算
if (!exp.contains(" ")) {
return;
}
if (clr_flag) {
clr_flag = false;
return;
}
clr_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);
double cnt = 0;
if (!s1.equals("") && !s2.equals("")) {
double d1 = Double.parseDouble(s1);
double d2 = Double.parseDouble(s2);
if (op.equals("+")) {
cnt = d1 + d2;
}
if (op.equals("-")) {
cnt = d1 - d2;
}
if (op.equals("x")) {
cnt = d1 * d2;
}
if (op.equals("÷")) {
if (d2 == 0) cnt = 0;
else cnt = d1 / d2;
}
if(op.equals("%")){
if (d1 == 0) cnt = 0;
else cnt = d1 / 100;
}
if (op.equals("/")){
if (d1 == 0) cnt = 0;
else cnt = -d1;
}
if (!s1.contains(".") && !s2.contains(".") && !op.equals("÷")) {
int res = (int) cnt;
editTextTextPersonName.setText(res + "");
} else {
editTextTextPersonName.setText(cnt + "");
}
}
//如果s1不是空 s2是空 就执行下一步
else if (!s1.equals("") && s2.equals("")) {
double d1 = Double.parseDouble(s1);
if (op.equals("+")) {
cnt = d1;
}
if (op.equals("-")) {
cnt = d1;
}
if (op.equals("×")) {
cnt = 0;
}
if (op.equals("÷")) {
cnt = 0;
}
if (op.equals("%")){
double data = d1 / 100;
cnt = data;
}
if (op.equals("/")){
cnt = 0 - d1;
}
editTextTextPersonName.setText(cnt + "");
// if (!s1.contains(".")) {
// int res = (int) cnt;
// editTextTextPersonName.setText(res + "");
// } else {
// editTextTextPersonName.setText(cnt + "");
// }
}
//如果s1是空 s2不是空 就执行下一步
else if (s1.equals("") && !s2.equals("")) {
double d2 = Double.parseDouble(s2);
if (op.equals("+")) {
cnt = d2;
}
if (op.equals("-")) {
cnt = 0 - d2;
}
if (op.equals("×")) {
cnt = 0;
}
if (op.equals("÷")) {
cnt = 0;
}
if (op.equals("/")){
cnt = 0 - d2;
}
if (!s2.contains(".")) {
int res = (int) cnt;
editTextTextPersonName.setText(res + "");
} else {
editTextTextPersonName.setText(cnt + "");
}
} else {
editTextTextPersonName.setText("");
}
}
}
结果显示