(安卓学习笔记)安卓实现简单计算器
功能模块代码
package com.example.lesson3_pre;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
/*
类名:MainActivity
功能描述:实例化计算器的各个按钮;完成计算器界面设计;处理点击各个按钮后的事件,完成简单计算的功能
JDK版本:1.8
创建日期:2020年2月27日10:43:48
*/
public class MainActivity extends AppCompatActivity {
private Button btnC, btnDel, btnDev, btnAdd, btnSub, btnMul, btnEqu, btnPoi;
private TextView txtResult;
private TextView txtCal;
private StringBuffer digtalA = new StringBuffer(), digtalB = new StringBuffer(), digtalC = new StringBuffer();
private boolean isChar = false;
private int operator = 0;
private boolean isdigtalA = true;
/*
方法名:onCreate()
参数名:savedInstanceState
功能描述:以key-value的形式储存数据,用来保存Activity的状态
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
this.setContentView( R.layout.calc );
initView();
//加法绑定的监听事件,operator=0为点击的是加号
btnAdd.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
if (digtalA.length() == 0) {
return;
}
operator = 0;
isChar = true;
isdigtalA = false;
digtalC.append( "+" );
txtCal.setText( digtalC.toString() );
}
} );
//减法绑定的监听事件
btnSub.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
if (digtalA.length() == 0) {
return;
}
operator = 1;
isChar = true;
isdigtalA = false;
digtalC.append( "-" );
txtCal.setText( digtalC.toString() );
}
} );
//乘法绑定的监听事件
btnMul.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
if (digtalA.length() == 0) {
return;
}
operator = 2;
isChar = true;
isdigtalA = false;
digtalC.append( "×" );
txtCal.setText( digtalC.toString() );
}
} );
//除法绑定的监听事件
btnDev.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
if (digtalA.length() == 0) {
return;
}
operator = 3;
isChar = true;
isdigtalA = false;
digtalC.append( "÷" );
txtCal.setText( digtalC.toString() );
}
} );
//回退键绑定的监听事件
btnDel.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
if (digtalC.length() > 0) {
//截取缓存C中的子串
String temp = digtalC.substring( 0, digtalC.length() - 1 );
digtalC = new StringBuffer();
digtalC.append( temp );
txtCal.setText( temp );
}
if (isdigtalA) {
if (digtalA.length() > 0) {
String temp = digtalA.substring( 0, digtalA.length() - 1 );
digtalA = new StringBuffer();
digtalA.append( temp );
} else {
digtalA = new StringBuffer();
digtalA.append( "0" );
}
} else {
if (digtalB.length() > 0) {
String temp = digtalB.substring( 0, digtalB.length() - 1 );
digtalB = new StringBuffer();
digtalB.append( temp );
txtCal.setText( temp );
} else {
digtalB = new StringBuffer();
digtalB.append( "0" );
txtCal.setText( digtalB.toString() );
}
}
}
} );
//清零键绑定的监听事件
btnC.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isdigtalA) {
digtalA = new StringBuffer();
} else {
digtalB = new StringBuffer();
}
digtalC = new StringBuffer();
txtCal.setText( "0" );
txtResult.setText( "0" );
}
} );
//点击“=”后的事件处理
btnEqu.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
//如果运算符之前和之后的数字有一个为0,则不进行操作
if (digtalA.length() == 0 || digtalB.length() == 0) {
return;
}
//将缓存中的数字由字符长类型转换为浮点数类型
float a = Float.parseFloat( digtalA.toString() );
float b = Float.parseFloat( digtalB.toString() );
float c = 0;
switch (operator) {
case 0:
c = a + b;
break;
case 1:
c = a - b;
break;
case 2:
c = a * b;
break;
case 3:
c = a / b;
break;
}
//以字符串类型输出结果,并将缓存中的数字和运算符清除
txtResult.setText( c + "" );
digtalA = new StringBuffer();
digtalB = new StringBuffer();
digtalC = new StringBuffer();
isChar = false;
}
} );
}
//初始化界面
void initView() {
txtCal = this.findViewById( R.id.txtCal );
txtResult = this.findViewById( R.id.txtResult );
btnC = this.findViewById( R.id.btnC );
btnDel = this.findViewById( R.id.btnDel );
btnDev = this.findViewById( R.id.btnDev );
btnAdd = this.findViewById( R.id.btnAdd );
btnSub = this.findViewById( R.id.btnSub );
btnMul = this.findViewById( R.id.btnMul );
btnEqu = this.findViewById( R.id.btnEqu );
}
//定义一个单击方法,绑定1,2,3,4,5,6,7,8,9,.按钮的监听事件
public void myClick(View view) {
switch (view.getId()) {
case R.id.btn0:
digtalC.append( "0" );
txtCal.setText( digtalC.toString() );
if (isChar) {
digtalB.append( "0" );
} else {
digtalA.append( "0" );
}
break;
case R.id.btn1:
digtalC.append( "1" );
txtCal.setText( digtalC.toString() );
if (isChar) {
digtalB.append( "1" );
} else {
digtalA.append( "1" );
}
break;
case R.id.btn2:
digtalC.append( "2" );
txtCal.setText( digtalC.toString() );
if (isChar) {
digtalB.append( "2" );
} else {
digtalA.append( "2" );
}
break;
case R.id.btn3:
digtalC.append( "3" );
txtCal.setText( digtalC.toString() );
if (isChar) {
digtalB.append( "3" );
;
} else {
digtalA.append( "3" );
}
break;
case R.id.btn4:
digtalC.append( "4" );
txtCal.setText( digtalC.toString() );
if (isChar) {
digtalB.append( "4" );
} else {
digtalA.append( "4" );
}
break;
case R.id.btn5:
digtalC.append( "5" );
txtCal.setText( digtalC.toString() );
if (isChar) {
digtalB.append( "5" );
} else {
digtalA.append( "5" );
}
break;
case R.id.btn6:
digtalC.append( "6" );
txtCal.setText( digtalC.toString() );
if (isChar) {
digtalB.append( "6" );
} else {
digtalA.append( "6" );
}
break;
case R.id.btn7:
digtalC.append( "7" );
txtCal.setText( digtalC.toString() );
if (isChar) {
digtalB.append( "7" );
} else {
digtalA.append( "7" );
}
break;
case R.id.btn8:
digtalC.append( "8" );
txtCal.setText( digtalC.toString() );
if (isChar) {
digtalB.append( "8" );
} else {
digtalA.append( "8" );
}
break;
case R.id.btn9:
digtalC.append( "9" );
txtCal.setText( digtalC.toString() );
if (isChar) {
digtalB.append( "9" );
} else {
digtalA.append( "9" );
}
break;
case R.id.btnPoi:
digtalC.append( "." );
txtCal.setText( digtalC.toString() );
if (isChar) {
digtalB.append( "." );
} else {
digtalA.append( "." );
}
break;
}
}
}
视图模块代码
<?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/txtCal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:text="计算"
android:textSize="25dp" />
<TextView
android:id="@+id/txtResult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:text="显示结果"
android:textSize="50dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btnC"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="C" />
<Button
android:id="@+id/btnDel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:onClick="myClick"
android:text="DEL" />
<Button
android:id="@+id/btnDev"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="÷" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="1" />
<Button
android:id="@+id/btn2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="2" />
<Button
android:id="@+id/btn3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="3" />
<Button
android:id="@+id/btnAdd"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="+" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="4" />
<Button
android:id="@+id/btn5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="5" />
<Button
android:id="@+id/btn6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="6" />
<Button
android:id="@+id/btnSub"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="-" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="7" />
<Button
android:id="@+id/btn8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="8" />
<Button
android:id="@+id/btn9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="9" />
<Button
android:id="@+id/btnMul"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="×" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="20dp"
android:orientation="horizontal">
<Button
android:id="@+id/btn0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="0" />
<Button
android:id="@+id/btnPoi"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myClick"
android:text="." />
<Button
android:id="@+id/btnEqu"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:onClick="myClick"
android:text="=" />
</LinearLayout>
</LinearLayout>