安卓简易计算器
注:本app是一个安卓简易计算器,只能进行一步运算。
在界面设计区域中设置一个6行4列的网格布局,第1行为显示数据的文本标签,第2行为清除数据的按钮,第3~6行均划分为4列,共安排16个按钮,分别代表数字0、1、2、......、9及加、减、乘、除、等号等符号。
设计布局文件activity_easy_calculator.xml:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:rowCount="6"
android:columnCount="4"
>
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_columnSpan="4"
android:layout_marginLeft="4px"
android:layout_gravity="left"
android:text=""
android:textSize="50dip" />
<Button
android:id="@+id/clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnSpan="4"
android:layout_columnWeight="4"
android:text="清除"
android:textSize="26sp" />
<Button
android:id="@+id/one"
android:text="1"
android:textSize="26sp" />
<Button
android:id="@+id/two"
android:text="2"
android:textSize="26sp" />
<Button
android:id="@+id/three"
android:text="3"
android:textSize="26sp" />
<Button
android:id="@+id/plus"
android:text="+"
android:textSize="26sp" />
<Button
android:id="@+id/four"
android:text="4"
android:textSize="26sp" />
<Button
android:id="@+id/five"
android:text="5"
android:textSize="26sp" />
<Button
android:id="@+id/six"
android:text="6"
android:textSize="26sp" />
<Button
android:id="@+id/minus"
android:text="-"
android:textSize="26sp" />
<Button
android:id="@+id/seven"
android:text="7"
android:textSize="26sp" />
<Button
android:id="@+id/eight"
android:text="8"
android:textSize="26sp" />
<Button
android:id="@+id/nine"
android:text="9"
android:textSize="26sp" />
<Button
android:id="@+id/multiply"
android:text="*"
android:textSize="26sp" />
<Button
android:id="@+id/point"
android:text="."
android:textSize="26sp" />
<Button
android:id="@+id/zero"
android:text="0"
android:textSize="26sp" />
<Button
android:id="@+id/equal"
android:text="="
android:textSize="26sp" />
<Button
android:id="@+id/divided"
android:text="/"
android:textSize="26sp" />
</GridLayout>
设计控制文件EasycalCulator.java:
package com.example.administrator.easycalculator;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.widget.Toast;
import java.util.ArrayList;
public class EasyCalculator extends AppCompatActivity {
private TextView textView;
private Button button_clear;
private Button button_1;
private Button button_2;
private Button button_3;
private Button button_4;
private Button button_5;
private Button button_6;
private Button button_7;
private Button button_8;
private Button button_9;
private Button button_0;
private Button button_point;
private Button button_plus;
private Button button_minus;
private Button button_multiply;
private Button button_divided;
private Button button_equal;
private ClickListener clickListener;
private String operator;
private boolean flag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_easy_calculator);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
//与组件建立关联
textView=findViewById(R.id.textView);
button_clear=findViewById(R.id.clear);
button_1=findViewById(R.id.one);
button_2=findViewById(R.id.two);
button_3=findViewById(R.id.three);
button_4=findViewById(R.id.four);
button_5=findViewById(R.id.five);
button_6=findViewById(R.id.six);
button_7=findViewById(R.id.seven);
button_8=findViewById(R.id.eight);
button_9=findViewById(R.id.nine);
button_0=findViewById(R.id.zero);
button_point=findViewById(R.id.point);
button_plus=findViewById(R.id.plus);
button_minus=findViewById(R.id.minus);
button_multiply=findViewById(R.id.multiply);
button_divided=findViewById(R.id.divided);
button_equal=findViewById(R.id.equal);
clickListener=new ClickListener();
operator=new String();
flag=true;
//为按钮注册监听接口
button_clear.setOnClickListener(clickListener);
button_1.setOnClickListener(clickListener);
button_2.setOnClickListener(clickListener);
button_3.setOnClickListener(clickListener);
button_4.setOnClickListener(clickListener);
button_5.setOnClickListener(clickListener);
button_6.setOnClickListener(clickListener);
button_7.setOnClickListener(clickListener);
button_8.setOnClickListener(clickListener);
button_9.setOnClickListener(clickListener);
button_0.setOnClickListener(clickListener);
button_point.setOnClickListener(clickListener);
button_plus.setOnClickListener(clickListener);
button_minus.setOnClickListener(clickListener);
button_multiply.setOnClickListener(clickListener);
button_divided.setOnClickListener(clickListener);
button_equal.setOnClickListener(clickListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_easy_calculator, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/*
* 定义实现监听接口的内部类
* */
class ClickListener implements OnClickListener{
public void onClick(View v){
switch(v.getId()) {
case R.id.one:
textView.append("1");
break;
case R.id.two:
textView.append("2");
break;
case R.id.three:
textView.append("3");
break;
case R.id.four:
textView.append("4");
break;
case R.id.five:
textView.append("5");
break;
case R.id.six:
textView.append("6");
break;
case R.id.seven:
textView.append("7");
break;
case R.id.eight:
textView.append("8");
break;
case R.id.nine:
textView.append("9");
break;
case R.id.zero:
textView.append("0");
break;
case R.id.point:
textView.append(".");
break;
case R.id.plus:
textView.append("+");
operator="+";
break;
case R.id.minus:
textView.append("-");
operator="-";
break;
case R.id.multiply:
textView.append("*");
operator="*";
break;
case R.id.divided:
textView.append("/");
operator="/";
break;
case R.id.clear:
textView.setText("");
break;
case R.id.equal:
double sum=calculate();
textView.setText(""+sum);
break;
}
}
/*
* 计算结果
* */
private double calculate(){
double sum=0;
String regex="[^0-9|.]+"; //正则表达式,匹配数字和点字符
String string=textView.getText().toString(); //获取表达式
String[] num=string.split(regex); //从表达式里获取数字
switch(operator){
case "+":
sum=Double.parseDouble(num[0])+Double.parseDouble(num[1]);
break;
case "-":
sum=Double.parseDouble(num[0])-Double.parseDouble(num[1]);
break;
case "*":
sum=Double.parseDouble(num[0])*Double.parseDouble(num[1]);
break;
case "/":
if(Double.parseDouble(num[1])==0){ //当进行除法运算时判断除数是否为0
sum=0;
break;
}
sum=Double.parseDouble(num[0])/Double.parseDouble(num[1]);
break;
}
return sum;
}
}
}
效果展示: