这是用Android Studio编写的 简易计算器 。功能主要是实现简单的加减操作,以及比较复杂的四则运算。
话不多说请看设计!
界面设计
在layout下面的calu.xml文件進行設計,推荐使用线性布局。沒有的先自行创建文件。
源码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textResult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:text="请输入:"
android:textSize="30sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/buttonC"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="C" />
<Button
android:id="@+id/buttonDEL"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:text="DEL" />
<Button
android:id="@+id/buttonADD"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="+" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/button1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="1" />
<Button
android:id="@+id/button2"
android:layout_width="0dp"
android:layout_weight="1"
android:onClick="myClick"
android:layout_height="wrap_content"
android:text="2" />
<Button
android:id="@+id/button3"
android:layout_width="0dp"
android:layout_weight="1"
android:onClick="myClick"
android:layout_height="wrap_content"
android:text="3" />
<Button
android:id="@+id/buttonSUB"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="-" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/button4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="4" />
<Button
android:id="@+id/button5"
android:layout_width="0dp"
android:layout_weight="1"
android:onClick="myClick"
android:layout_height="wrap_content"
android:text="5" />
<Button
android:id="@+id/button6"
android:layout_width="0dp"
android:layout_weight="1"
android:onClick="myClick"
android:layout_height="wrap_content"
android:text="6" />
<Button
android:id="@+id/buttonMUL"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="*" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/button7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="7" />
<Button
android:id="@+id/button8"
android:layout_width="0dp"
android:layout_weight="1"
android:onClick="myClick"
android:layout_height="wrap_content"
android:text="8" />
<Button
android:id="@+id/button9"
android:layout_width="0dp"
android:layout_weight="1"
android:onClick="myClick"
android:layout_height="wrap_content"
android:text="9" />
<Button
android:id="@+id/buttonDIV"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="/" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/buttonZero"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="0" />
<Button
android:id="@+id/buttonPoint"
android:layout_width="0dp"
android:layout_weight="1"
android:onClick="myClick"
android:layout_height="wrap_content"
android:text="." />
<Button
android:id="@+id/buttonResult"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:text="=" />
</LinearLayout>
</LinearLayout>
功能的實現
代码如下:
package com.example.a124240.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
/**
* Created by qiaolong 2021/3/20.
*/
public class MainActivity extends AppCompatActivity {
private TextView textResult;
private Button buttonAdd, buttonSub, buttonMul, buttonDiv, buttonDel, buttonCle, buttonRes;
// 定义里一个字符串
private StringBuffer digital1 = new StringBuffer(), digital2 = new StringBuffer(), digital3 = new StringBuffer();
private boolean isChar = false;
private boolean isDigital1 = true;
private boolean flag1 = false;
private float result;
private String signal;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.calu1);
// textResult = (TextView) this.findViewById(R.id.textResult);
//实例化
init();
//加法
buttonAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(digital1.length() == 0){
return;
}
isChar = true;
textResult.setText("0");
if (flag1){
float a = Float.parseFloat(digital1.toString());
float b = Float.parseFloat(digital2.toString());
mySignal(signal,a,b);
//进行 浮点型向stringbuffer的转换【float->string->stringbuffer】
String s1 = Float.toString(result);
digital1= new StringBuffer(s1);
textResult.setText(digital1);
digital2 = new StringBuffer();
}else {
textResult.setText(digital1);
}
signal = "+";
flag1 = true;
}
});
//减法
buttonSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(digital1.length() == 0){
return;
}
isChar = true;
textResult.setText("0");
if (flag1){
float a = Float.parseFloat(digital1.toString());
float b = Float.parseFloat(digital2.toString());
mySignal(signal,a,b);
textResult.setText("0");
//进行 浮点型向stringbuffer的转换【float->string->stringbuffer】
String s1 = Float.toString(result);
digital1= new StringBuffer(s1);
textResult.setText(digital1);
digital2 = new StringBuffer();
}
signal = "-";
flag1 = true;
}
});
//乘法
buttonMul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(digital1.length() == 0){
return;
}
isChar = true;
textResult.setText("0");
if (flag1){
float a = Float.parseFloat(digital1.toString());
float b = Float.parseFloat(digital2.toString());
mySignal(signal,a,b);
textResult.setText("0");
//进行 浮点型向stringbuffer的转换【float->string->stringbuffer】
String s1 = Float.toString(result);
digital1= new StringBuffer(s1);
textResult.setText(digital1);
digital2 = new StringBuffer();
}
signal = "*";
flag1 = true;
}
});
//除法
buttonDiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(digital1.length() == 0){
return;
}
isChar = true;
textResult.setText("0");
if (flag1){
float a = Float.parseFloat(digital1.toString());
float b = Float.parseFloat(digital2.toString());
mySignal(signal,a,b);
textResult.setText("0");
//进行 浮点型向stringbuffer的转换【float->string->stringbuffer】
String s1 = Float.toString(result);
digital1= new StringBuffer(s1);
textResult.setText(digital1);
digital2 = new StringBuffer();
}
signal = "/";
flag1 = true;
}
});
//等号
buttonRes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(digital1.length() == 0 || digital2.length() == 0){
return;
}
float a = Float.parseFloat(digital1.toString());
float b = Float.parseFloat(digital2.toString());
mySignal(signal,a,b);
isChar = false;
flag1 = false;
//进行 数字向stringbuffer的转换【float->string->stringbuffer】
String s1 = Float.toString(result);
digital1= new StringBuffer(s1);
textResult.setText(digital1);
digital2 = new StringBuffer();
}
});
//清除全部
buttonCle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isDigital1&&(!digital1.equals(null))){
digital1 = new StringBuffer("");
digital2 = new StringBuffer("");
} else {
digital1 = new StringBuffer("");
digital2 = new StringBuffer("");
}
isChar = false;
flag1 = false;
textResult.setText("0");
}
});
//清除一个
buttonDel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isDigital1) {
if (digital1.length() > 0) {
String temp = digital1.substring(0, digital1.length() - 1);//存疑
digital1 = new StringBuffer();
digital1.append(temp);
textResult.setText(digital1.toString());
} else {
digital1 = new StringBuffer();
textResult.setText("0");
}
}
else{
if (digital2.length() > 0) {
String temp = digital2.substring(0,digital2.length() - 1);
digital2 = new StringBuffer();
digital2.append(temp);
textResult.setText(digital2.toString());
}
}
}
});
}
//实例化
void init(){
//buttonSub, buttonMul, buttonDiv, buttonDel, buttonCle, buttonRes;
textResult = (TextView) this.findViewById(R.id.textResult);
buttonAdd = (Button) this.findViewById(R.id.buttonADD); //强制类型转换
buttonSub = (Button) this.findViewById(R.id.buttonSUB);
buttonMul = (Button) this.findViewById(R.id.buttonMUL);
buttonDiv = (Button) this.findViewById(R.id.buttonDIV);
buttonDel = (Button) this.findViewById(R.id.buttonDEL);
buttonCle = (Button) this.findViewById(R.id.buttonC);
buttonRes = (Button) this.findViewById(R.id.buttonResult);
}
//关于符号
void mySignal(String s,float a,float b){
switch (s) {
case "+":
result = a + b;
break;
case "-":
result = a - b;
break;
case "*":
result = a * b;
break;
case "/":
result = a / b;
break;
}
}
public void myClick(View v) {
switch (v.getId()) {
case R.id.button1:
if (isChar){
digital2.append("1");
textResult.setText(digital2);
}else {
digital1.append("1");
textResult.setText(digital1);
}
break;
case R.id.button2:
if (isChar){
digital2.append("2");
textResult.setText(digital2);
}else {
digital1.append("2");
textResult.setText(digital1);
}
break;
case R.id.button3:
if (isChar){
digital2.append("3");
textResult.setText(digital2);
}else {
digital1.append("3");
textResult.setText(digital1);
}
break;
case R.id.button4:
if (isChar){
digital2.append("4");
textResult.setText(digital2);
}else {
digital1.append("4");
textResult.setText(digital1);
}
break;
case R.id.button5:
if (isChar){
digital2.append("5");
textResult.setText(digital2);
}else {
digital1.append("5");
textResult.setText(digital1);
}
break;
case R.id.button6:
if (isChar){
digital2.append("6");
textResult.setText(digital2);
}else {
digital1.append("6");
textResult.setText(digital1);
}
break;
case R.id.button7:
if (isChar){
digital2.append("7");
textResult.setText(digital2);
}else {
digital1.append("7");
textResult.setText(digital1);
}
break;
case R.id.button8:
if (isChar){
digital2.append("8");
textResult.setText(digital2);
}else {
digital1.append("8");
textResult.setText(digital1);
}
break;
case R.id.button9:
if (isChar){
digital2.append("9");
textResult.setText(digital2);
}else {
digital1.append("9");
textResult.setText(digital1);
}
break;
case R.id.buttonZero:
if (isChar){
digital2.append("0");
textResult.setText(digital2);
}else {
digital1.append("0");
textResult.setText(digital1);
}
break;
case R.id.buttonPoint:
if (isChar){ //点了 + 号
digital2.append("."); //
textResult.setText(digital2);
}else {
digital1.append(".");
textResult.setText(digital1);
}
break;
}
}
}
其他配置
1.頂部標題
打開Java—res—string.xml 更換計算器的頂部
2.修改測試
欢迎大家一起交流!