用Android自带组件写计算器
首先制作一款单activity的Android app需要
①一个UI界面。
②对UI界面中相应的组件绑定对应操作。
UI界面
一个计算器需要9个数字,及其基本的运算符号,和一个能显示输入和结果的显示屏。数字和运算符号都可用Button组件,二显示则可用TextView组件来实现。
这里给大家展示下笔者的源码
内联代码片
。
// An highlighted block
<?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="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:layout_gravity="bottom">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text=""
android:textSize="60dp"
android:hint=""/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/btn7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="7"
android:textSize="60dp" />
<Button
android:id="@+id/btn8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="8"
android:textSize="60dp"/>
<Button
android:id="@+id/btn9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="9"
android:textSize="60dp"/>
<Button
android:id="@+id/btnDe"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="←"
android:textSize="60dp"/>
<Button
android:id="@+id/btnc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="C"
android:textSize="60dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
<Button
android:id="@+id/btn4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="4"
android:textSize="60dp"/>
<Button
android:id="@+id/btn5"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="5"
android:textSize="60dp"/>
<Button
android:id="@+id/btn6"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="6"
android:textSize="60dp"/>
<Button
android:id="@+id/btna"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="+"
android:textSize="60dp"/>
<Button
android:id="@+id/btnd"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="-"
android:textSize="60dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
<Button
android:id="@+id/btn1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1"
android:textSize="60dp"/>
<Button
android:id="@+id/btn2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2"
android:textSize="60dp"/>
<Button
android:id="@+id/btn3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="3"
android:textSize="60dp"/>
<Button
android:id="@+id/btnm"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="*"
android:textSize="60dp"/>
<Button
android:id="@+id/btndvs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="/"
android:textSize="60dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<Button
android:id="@+id/btn0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="0"
android:textSize="60dp" />
<Button
android:id="@+id/btnmd"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="%"
android:textSize="60dp"/>
<Button
android:id="@+id/btnA"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="A"
android:textSize="60dp"/>
<Button
android:id="@+id/btne"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="="
android:textSize="60dp"/>
</LinearLayout>
这里为了让组件对得整齐些特意为一些组件的 android:layout_width设置为0dp与fill_parent。
Java代码
打开默认的MianActivity,为UI界面中的组件绑定监听事件,源码如下:
下面展示一些 内联代码片
。
// An highlighted block
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.myapplication.math;
public class MainActivity extends AppCompatActivity {
String str="";
String str2="";
int m;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button btn0=(Button) findViewById(R.id.btn0);
final Button btn1=(Button) findViewById(R.id.btn1);
final Button btn2=(Button) findViewById(R.id.btn2);
final Button btn3=(Button) findViewById(R.id.btn3);
final Button btn4=(Button) findViewById(R.id.btn4);
final Button btn5=(Button) findViewById(R.id.btn5);
final Button btn6=(Button) findViewById(R.id.btn6);
final Button btn7=(Button) findViewById(R.id.btn7);
final Button btn8=(Button) findViewById(R.id.btn8);
final Button btn9=(Button) findViewById(R.id.btn9);
final Button btnc=(Button) findViewById(R.id.btnc);
final Button btna=(Button) findViewById(R.id.btna);
final Button btnd=(Button) findViewById(R.id.btnd);
final Button btnm=(Button) findViewById(R.id.btnm);
final Button btndvs=(Button) findViewById(R.id.btndvs);
final Button btnmd=(Button) findViewById(R.id.btnmd);
final Button btnA=(Button) findViewById(R.id.btnA);
final Button btne=(Button) findViewById(R.id.btne);
final Button btnDe=(Button) findViewById(R.id.btnDe);
final TextView tv=(TextView) findViewById(R.id.tv );
final math math=new math();
btn0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(str.equals("")){
str="0";
tv.setText("0");
}
else if (str.equals("0")){}
else
{
tv.setText(str + 0);
str = tv.getText().toString();
}
}
});
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(str+"1");
str=tv.getText().toString();
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(str+"2");
str=tv.getText().toString();
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(str+"3");
str=tv.getText().toString();
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(str+"4");
str=tv.getText().toString();
}
});
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(str+"5");
str=tv.getText().toString();
}
});
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(str+"6");
str=tv.getText().toString();
}
});
btn7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(str+"7");
str=tv.getText().toString();
}
});
btn8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(str+"8");
str=tv.getText().toString();
}
});
btn9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(str+"9");
str=tv.getText().toString();
}
});
btnDe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
str=math.getDe(str);
tv.setText(str);
}
});
btnc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
str="";
str2="";
tv.setText("");
}
});
btna.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (str.equals(""))
{}
else
{
str2 = str;
str = "";
tv.setText("");
m = 1;
}
}
});
btnd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (str.equals("")){
str=str+"-";
tv.setText(str);
}
else {
str2 = str;
str = "";
tv.setText("");
m = 2;
}
}
});
btnm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (str.equals("")){}
else {
str2 = str;
str = "";
tv.setText("");
m = 3;
}
}
});
btndvs.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (str.equals("")){}
else {
str2 = str;
str = "";
tv.setText("");
m = 4;
}
}
});
btnmd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (str.equals("")){}
else {
str2 = str;
str = "";
tv.setText("");
m = 5;
}
}
});
btnA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(str2.equals(""))
{
tv.setText(math.getfactorial(str));
str="";
}
}
});
btne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(str.equals("")||str2.equals(""))
{
}
else
{
tv.setText(math.getResult(str, str2, m));
str = "";
str2 = "";
}
}
});
}
}
这里说一下因为0、负数和空串的干扰需要对一些组件添加额外的判断语句。
因为不想在MainActivity中出现过于繁杂的代码,笔者还额外自定义了个math类用于计算。源码如下:
// An highlighted block
package com.example.myapplication;
public class math {
public String getfactorial(String str)
{
Double number1=Double.parseDouble(str);
Double number2=1.0;
if (number1>=0) {
for (int i = 1; number1 >= i; i++) {
number2 = i * number2;
}
str = str + "的阶乘是:" + number2.toString();
}
else{
str="负数没有阶乘!";
}
return str;
}
public String getResult(String str2,String str,int m)
{
Double number1=Double.parseDouble(str);
Double number2=Double.parseDouble(str2);
Double number3;
switch (m)
{
case 1:
number3=number1+number2;
str=str+"+"+str2+"="+number3.toString();
break;
case 2:
number3=number1-number2;
str=str+"-"+str2+"="+number3.toString();
break;
case 3:
number3=number1*number2;
str=str+"*"+str2+"="+number3.toString();
break;
case 4:
number3=number1/number2;
str=str+"/"+str2+"="+number3.toString();
break;
case 5:
number3=number1%number2;
str=str+"%"+str2+"="+number3.toString();
break;
}
return str;
}
public String getDe(String str)
{
String str2 =str.substring(0,str.length()-1);
return str2;
}
}
这样一个简单的单activity程序就写好啦!你以为这样就结束了吗?no!计算机的功能难道就仅止于此了吗?它应该会有更漂亮的UI,简洁的实现代码和更强大的功能。这些都等着读者去实现。