Android Studio 编写简易计算器App (Java语言版)
效果演示
布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:orientation="vertical">
<TextView
android:id="@+id/mini"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="40dp"
android:text=""
android:textDirection="rtl"/>
<TextView
android:id="@+id/max"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="100dp"
android:text=""
android:textDirection="rtl"/>
LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="%"
android:textSize="30dp"
android:onClick="surplus"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="CE"
android:textSize="30dp"
android:onClick="clearce"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="C"
android:textSize="30dp"
android:onClick="clearc"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="⇦"
android:textSize="30dp"
android:onClick="backsprce"/>
LinearLayout>
LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="1/x"
android:textSize="30dp"
android:onClick="reciprocal"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="x²"
android:textSize="30dp"
android:onClick="square"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="²√x"
android:textSize="30dp"
android:onClick="squareroot"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="÷"
android:textSize="60dp"
android:onClick="division"/>
LinearLayout>
LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="7"
android:textSize="30dp"
android:onClick="number_7"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="8"
android:textSize="30dp"
android:onClick="number_8"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="9"
android:textSize="30dp"
android:onClick="number_9"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="×"
android:textSize="30dp"
android:onClick="multiplication"/>
LinearLayout>
LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="4"
android:textSize="30dp"
android:onClick="number_4"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="5"
android:textSize="30dp"
android:onClick="number_5"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="6"
android:textSize="30dp"
android:onClick="number_6"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="-"
android:textSize="30dp"
android:onClick="subtraction"/>
LinearLayout>
LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="1"
android:textSize="30dp"
android:onClick="number_1"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="2"
android:textSize="30dp"
android:onClick="number_2"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="3"
android:textSize="30dp"
android:onClick="number_3"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="+"
android:textSize="30dp"
android:onClick="addition"/>
LinearLayout>
LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="±"
android:textSize="30dp"
android:onClick="change"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="0"
android:textSize="30dp"
android:onClick="number_0"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="."
android:textSize="30dp"/>
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="="
android:textSize="30dp"
android:onClick="equal"/>
LinearLayout>
LinearLayout>
LinearLayout>
Java文件
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
public class MainActivity extends Activity {
private TextView tv1;
private TextView tv2;
private StringBuilder viewStr;
private int index = 0;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_calc);
tv1 = (TextView) findViewById(R.id.mini);
tv2 = (TextView) findViewById(R.id.max);
viewStr = new StringBuilder();
index = 0;
}
public String calc(StringBuilder strB) {
String allS = strB.toString();
String[] asmd = {"+","-","×","÷","%"};
int x = 0; int y = 0;
String result = null;
for (int i = 0; i < 5; i ++) {
int inde = strB.indexOf(asmd[i]);
if (inde > 0) {
String a = allS.split(asmd[i])[0];
String b = allS.split(asmd[i])[1];
if (i == 0) {result = String.valueOf(Integer.parseInt(a) + Integer.parseInt(b));}
if (i == 1) {result = String.valueOf(Integer.parseInt(a) - Integer.parseInt(b));}
if (i == 2) {result = String.valueOf(Integer.parseInt(a) * Integer.parseInt(b));}
if (i == 3) {
if (Integer.parseInt(b) == 0) {
Toast.makeText(this,"0不能为除数",Toast.LENGTH_SHORT).show();
result = String.valueOf(Integer.parseInt(a));
}else {
result = String.valueOf(Integer.parseInt(a) / Integer.parseInt(b));
}
}
if (i == 4) {result = String.valueOf(Integer.parseInt(a) % Integer.parseInt(b));}
}
}
return result;
}
public void number_0(View view) { viewStr.append("0"); index ++ ; tv2.setText(viewStr); }
public void number_1(View view) { viewStr.append("1"); index ++ ; tv2.setText(viewStr); }
public void number_2(View view) { viewStr.append("2"); index ++ ; tv2.setText(viewStr); }
public void number_3(View view) { viewStr.append("3"); index ++ ; tv2.setText(viewStr); }
public void number_4(View view) { viewStr.append("4"); index ++ ; tv2.setText(viewStr); }
public void number_5(View view) { viewStr.append("5"); index ++ ; tv2.setText(viewStr); }
public void number_6(View view) { viewStr.append("6"); index ++ ; tv2.setText(viewStr); }
public void number_7(View view) { viewStr.append("7"); index ++ ; tv2.setText(viewStr); }
public void number_8(View view) { viewStr.append("8"); index ++ ; tv2.setText(viewStr); }
public void number_9(View view) { viewStr.append("9"); index ++ ; tv2.setText(viewStr); }
public void backsprce(View view) {
if (viewStr.length() == 0) return;
index = viewStr.length();
viewStr.deleteCharAt(--index); tv2.setText(viewStr);
}
public void change(View view) {
String allS = viewStr.toString();
String[] asmd = {"+","-","×","÷","%"};
int inde = 0;
String a = null;
String b = null;
for (int i = 0; i < 5; i ++) {
inde = viewStr.indexOf(asmd[i]);
if (inde != -1) {
a = asmd[i];
break;
}
}
if (inde == -1) {
clearc(view);
int c = - Integer.parseInt(allS);
viewStr.append(String.valueOf(c));
index = String.valueOf(c).length();
tv2.setText(viewStr);
}
if (inde == index - 1) {
return;
}
if (inde >= 0 && inde < index) {
clearc(view);
b = allS.split(a)[0];
int c = - Integer.parseInt(allS.split(a)[1]);
viewStr.append(b).append(a).append(String.valueOf(c));
index = String.valueOf(c).length();
tv2.setText(viewStr);
}
}
public void clearc(View view) {
StringBuilder temp = new StringBuilder();
viewStr = temp.append("");
tv2.setText(viewStr);
index = 0;
}
public void clearce(View view) {
StringBuilder temp = new StringBuilder();
viewStr = temp.append("");
tv1.setText("");
tv2.setText(viewStr);
index = 0;
}
public void equal(View view) {
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && inde != index-1) {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a);
tv2.setText(viewStr);
index = viewStr.length();
return;
}else if (inde > 0 && inde == index-1) {
viewStr.deleteCharAt(--index);
tv1.setText(viewStr);
tv2.setText(viewStr);
}
}
tv1.setText(viewStr);
tv2.setText(viewStr);
}
public void addition(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && viewStr.charAt(index-1) >= '0' && viewStr.charAt(index-1) <= '9') {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a).append('+');
tv2.setText(viewStr);
index = viewStr.length();
return;
}
}
char a = viewStr.charAt(index-1);
if (a == '+') { return; }
if (a == '-' || a == '×' || a == '÷' || a == '%') {
viewStr.setCharAt(index-1,'+');
}else {
viewStr.append("+");
index ++ ;
}
tv2.setText(viewStr);
}
public void subtraction(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && viewStr.charAt(index-1) >= '0' && viewStr.charAt(index-1) <= '9') {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a).append('-');
tv2.setText(viewStr);
index = viewStr.length();
return;
}
}
char a = viewStr.charAt(index-1);
if (a == '-') { return; }
if (a == '+' || a == '×' || a == '÷' || a == '%') {
viewStr.setCharAt(index-1,'-');
}else {
viewStr.append("-");
index ++ ;
}
tv2.setText(viewStr);
}
public void multiplication(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && viewStr.charAt(index-1) >= '0' && viewStr.charAt(index-1) <= '9') {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a).append('×');
tv2.setText(viewStr);
index = viewStr.length();
return;
}
}
char a = viewStr.charAt(index-1);
if (a == '×') { return; }
if (a == '+' || a == '-' || a == '÷' || a == '%') {
viewStr.setCharAt(index-1,'×');
}else {
viewStr.append("×");
index ++ ;
}
tv2.setText(viewStr);
}
public void division(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && viewStr.charAt(index-1) >= '0' && viewStr.charAt(index-1) <= '9') {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a).append('÷');
tv2.setText(viewStr);
index = viewStr.length();
return;
}
}
char a = viewStr.charAt(index-1);
if (a == '÷') { return; }
if (a == '+' || a == '-' || a == '×' || a == '%') {
viewStr.setCharAt(index-1,'÷');
}else {
viewStr.append("÷");
index ++ ;
}
tv2.setText(viewStr);
}
public void surplus(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && viewStr.charAt(index-1) >= '0' && viewStr.charAt(index-1) <= '9') {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a).append('%');
tv2.setText(viewStr);
index = viewStr.length();
return;
}
}
char a = viewStr.charAt(index-1);
if (a == '%') { return; }
if (a == '+' || a == '-' || a == '×' || a == '÷') {
viewStr.setCharAt(index-1,'%');
}else {
viewStr.append("%");
index ++ ;
}
tv2.setText(viewStr);
}
public void reciprocal(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > -1) { return; }
}
int a = Integer.parseInt(viewStr.toString().trim());
if (a == 0) {
Toast.makeText(this,"0不能为除数",Toast.LENGTH_SHORT).show();
return;
}
clearc(view);
viewStr.append(1/a);
index = String.valueOf(1/a).length();
tv2.setText(viewStr);
}
public void square(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > -1) { return; }
}
int a = Integer.parseInt(viewStr.toString().trim());
clearc(view);
viewStr.append(a*a);
index = String.valueOf(a*a).length();
tv2.setText(viewStr);
}
public void squareroot(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > -1) { return; }
}
int a = Integer.parseInt(viewStr.toString().trim());
clearc(view);
viewStr.append((int)Math.sqrt(a));
index = String.valueOf((int)Math.sqrt(a)).length();
tv2.setText(viewStr);
}
}