Android 计算器

Android 计算器

开发环境:android stdio 3.6.1

最终效果:

竖屏:
Android 计算器_第1张图片
横屏:
Android 计算器_第2张图片
完整项目:百度网盘链接
密码 v89n

主要代码:

MainActivity.java:

package com.example.experience_two;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.pm.PermissionGroupInfo;
import android.icu.util.VersionInfo;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.GridLayout;
import android.widget.TextView;

import java.math.BigDecimal;
import java.net.CacheRequest;
import java.sql.BatchUpdateException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "MainActivity";
    private GridLayout mGridLauout;
    private TextView text,answer;
    private int colCount,rowCount;
    private int screenWidthDp,screenHeightDp,ScreenWidthPx,ScreenHeightPx,flag=0;
    float density;
    int fontMaxCount1=11;
    float fontSize1=60;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();//去掉标题栏
        mGridLauout = (GridLayout) findViewById(R.id.GridLayout1);
        colCount = mGridLauout.getColumnCount();//按钮列数
        rowCount = mGridLauout.getRowCount();//按钮行数
        text=(TextView)findViewById(R.id.input_number);
        answer=(TextView)findViewById(R.id.out_number);
        text.setHorizontallyScrolling(true);//使text可以滑动
        WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics dm = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(dm);
        ScreenWidthPx = dm.widthPixels;// 屏幕宽度(像素)
        ScreenHeightPx= dm.heightPixels; // 屏幕高度(像素)
        density = dm.density;//屏幕密度(0.75 / 1.0 / 1.5)
        int densityDpi = dm.densityDpi;//屏幕密度dpi(120 / 160 / 240)
        //屏幕宽度算法:屏幕宽度(像素)/屏幕密度
        screenWidthDp = (int) (ScreenWidthPx/density);//屏幕宽度(dp)
        screenHeightDp = (int)(ScreenHeightPx/density);//屏幕高度(dp)
        //设置按钮在下半屏幕内均匀分布
        for (int i = 0; i < mGridLauout.getChildCount(); i++) {
            Button button = (Button) mGridLauout.getChildAt(i);
            Log.e(TAG, "column:" + colCount + ";  screenwidth:" + ScreenWidthPx);
            button.setWidth(ScreenWidthPx / colCount);
            if(screenWidthDp<screenHeightDp){
                flag=1;
                button.setHeight(ScreenHeightPx/ 2 / rowCount);
            }//竖屏时按钮部分占屏幕的二分是一
            else{
                button.setHeight(ScreenHeightPx/rowCount*2/3);
            }//横屏时按钮部分占屏幕的三分之二
            button.setOnClickListener(this);
        }//为网格布局中的每个按钮注册监听器并动态设置大小
        if(savedInstanceState!=null){
            String s=savedInstanceState.getString("KEY");
            String s1=savedInstanceState.getString("ANSWER");
            text.setText(s);
            answer.setText(s1);
        }//恢复text和answer的数据
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("KEY",text.getText().toString());
        outState.putString("ANSWER",answer.getText().toString());
    }//在旋转屏幕时保存text和answer中的数据
    @Override
    public void onClick(View view) {
        answer=(TextView)findViewById(R.id.out_number);
        String input=text.getText().toString();
        Button button=(Button)findViewById(view.getId());
        String btn=button.getText().toString();
        if(btn.charAt(0)>='0'&&btn.charAt(0)<='9'){
            if(input.equals("0")||input.matches("^.*[+−×÷]+0$")==true){
                text.setText(input.substring(0,input.length()-1)+btn);
            }//如果遇到以0打头的数字则先去掉0
            else if(!input.matches("^.*[%)]$")){
                text.setText(input+btn);
            }//如果text中为合法的式子则在末尾追加数字
            answer.setText(Calculator.Calculate(text.getText().toString()));//每次输入数字之后更新一次计算结果
        }//数字按钮
        else if(btn.matches("[+−×÷]+")&&!input.equals("")){
            if(input.matches("^.*[+−×÷.]+$")){
                text.setText(input.substring(0,text.length()-1)+btn);
            }//如果以运算符结尾,则改变运算符
            else{
                text.setText(input+btn);
            }//如果不以运算符结尾则追加运算符
        }//普通运算符
        else if(btn.equals("C")){
            text.setText("");
            answer.setText("");
            fontMaxCount1=11;
            fontSize1=60;//字符大小初始化
            if(flag==1)
            text.setTextSize(TypedValue.COMPLEX_UNIT_SP,fontSize1);
        }//清0按钮
        else if(!input.equals("")&&btn.equals("CE")){
                String str=input.substring(0,input.length()-1);
                if(str.equals("")){
                    answer.setText("");
                }
                else if(str.charAt(str.length()-1)>='0'&&str.charAt(str.length()-1)<='9'){
                    answer.setText(Calculator.Calculate(str));
                }//每回退一次计算结果更新一次
            text.setText(str);
            if(flag==1&&fontMaxCount1>11){
                fontMaxCount1-=1;
            } else if(flag==1){
                fontMaxCount1=11;
                fontSize1=60;
                text.setTextSize(TypedValue.COMPLEX_UNIT_SP,fontSize1);
            }//根据字符串长度动态调整字体大小
        }//退格按钮
        else if(btn.equals("%")){
            if(input.matches("^.*[0-9%]+$")){
                text.setText(input+btn);
                answer.setText(Calculator.Calculate(text.getText().toString()));
            }//只有数字或百分号之后才可以接百分号
        }//百分号
        else if(btn.equals(".")){
            if(!input.matches("^.*[0-9][.]+[0-9]+$|^.*[+−×÷.%)]$")){
                text.setText(input+btn);
            }//如果当前text最后一个数字含有小数点或以预算符结尾则加上小数点
        }//小数点
        else if(!input.equals("")&&btn.equals("+/−")){
            if(input.matches("^.*\\(−[0-9.]+\\)$")){
                String s1=input.substring(0,input.lastIndexOf("(−"))+input.substring(input.lastIndexOf("(−")+2,input.length()-1);
                text.setText(s1);
                answer.setText(Calculator.Calculate(s1));
            }//复数变正数
            else if(input.charAt(input.length()-1)>='0'&&input.charAt(input.length()-1)<='9'){
                int i;
                for (i = input.length()-1; i >= 0; i--) {
                    if (!(input.charAt(i) == '.' || input.charAt(i) >= '0' && input.charAt(i) <= '9')) {
                        break;
                    }
                }
                int len=input.length();
                String s1=input.substring(0, i +1),s2=input.substring(i + 1,len );
                text.setText(s1+ "(−" + s2+ ")");
                answer.setText(Calculator.Calculate(text.getText().toString()));
            }//正数变复数
        }//正负号转换
        else if(btn.equals("=")){
            fontMaxCount1=10;
            fontSize1=60;
            if(flag==1)
            text.setTextSize(TypedValue.COMPLEX_UNIT_SP,fontSize1);
                if(!answer.getText().toString().equals("")){
                text.setText(answer.getText());
            }//answer的结果转到text显示
            answer.setText("");//answer清空
        }//等号
        else if(btn.equals("x²")){
            if(!btn.matches("^.*[+−×÷]$")){
                text.setText(input+"^2");
                answer.setText(Calculator.Calculate(input+"^2"));
            }
        }//平方
        else if(btn.equals("x³")){
            if(!btn.matches("^.*[+−×÷]$")){
                text.setText(input+"^3");
                answer.setText(Calculator.Calculate(input+"^3"));
            }
        }
        else if(btn.equals("yˣ")){
            if(!btn.matches("^.*[+−×÷]$")){
                text.setText(input+"^");
            }
        }
        else if(btn.equals("10ˣ")){
            if(!btn.matches("^.*[+−×÷]$")){
                System.out.println(input+"10^");
                text.setText(input+"10^");
            }
            else{
                System.out.println(input+"×10^");
                text.setText(input+"×10^");
            }
        }
        else if(btn.equals("√")){
                text.setText(input+"√");
        }//开平方
        else if(btn.equals("ˣ√y")){
            text.setText(input+btn);
        }
        else if(btn.equals("ln")||btn.equals("lg")){
            text.setText(input+btn+"(");
        }
        else if(btn.equals("Rad")){
            button.setText("Deg");
        }
        else if(btn.equals("Deg")){
            button.setText("Rad");
        }
        else if(btn.equals("x!")){
            if(!btn.matches("^.*[+−×÷]$")){
                text.setText(input+"!");
                answer.setText(Calculator.Calculate(input+"!"));
            }
        }//阶乘
        else if(btn.equals("EE")){
            text.setText(input+"E");
        }
        else if(btn.equals("eˣ")){
            text.setText(input+"e^");
        }
        else if(btn.equals("1/x")){
            text.setText(input+"^-1");
        }
        else if(btn.equals("(")){
            text.setText(input+btn);
        }
        else if(btn.equals(")")){
            input=input+btn;
            text.setText(input);
            answer.setText(Calculator.Calculate(input));//输入右括号之后也要更新answer
        }
        else if(btn.equals("sin")||btn.equals("cos")||btn.equals("tan")||btn.equals("sinh")||btn.equals("cosh")||btn.equals("tanh")){
            text.setText(input+btn+"(");
        }//三角函数运算
        else if(btn.equals("Rand")){
            input=input+btn;
            text.setText(input);
            answer.setText(Calculator.Calculate(input));
        }//随机数
        else if(btn.equals("π")){
            text.setText(input+Math.PI);
        }
        if(flag==1&&input.length()>fontMaxCount1){
            fontMaxCount1=fontMaxCount1+1;
            fontSize1=40;
            text.setTextSize(TypedValue.COMPLEX_UNIT_SP,fontSize1);//根据字符串长度动态调整字符大小
        }
    }//根据按钮的内容设置不同的响应函数
}

Calculator:

package com.example.experience_two;
import android.support.v4.app.INotificationSideChannel;

import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Calculator {
    public static String Calculate(String input){
        while(input.matches("^.*\\(−?[0-9.]\\).*$")) {
            String reg = "\\((−?[0-9.])\\)";
            Pattern p = Pattern.compile(reg);
            Matcher m = p.matcher(input);
            while(m.find()) {
                input=input.replace(m.group(0),m.group(1));
            }
        }
        if(input.matches("^.*\\(.*\\).*$")){
            String reg = "\\(([^()]*)\\)";//匹配最里边的括号
            Pattern p = Pattern.compile(reg);
            Matcher m = p.matcher(input);
            while(m.find()) {
                input=input.replace(m.group(0),Calculate(m.group(1)));
            }
        }
        while(input.contains("!")){
            String reg = "([0-9]+)!";
            Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find()) {
                String str=m.group(0),str1=m.group(1);
                int a=Integer.parseInt(str1);
                double b=1;
                for(int i=1;i<=a;i++){
                    b=b*i;
                }
                input = input.replace(str, b + "");
            }
        }
        while(input.contains("sinh")) {
            System.out.println("sinh");
            String reg = "sinh\\(?(−?[0-9.]+)";
            Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find()) {
                String str=m.group(0),str1=m.group(1);
                double a;
                if(str1.contains("−")){
                    a=-Double.parseDouble(str1.substring(1));
                } else {
                    a=Double.parseDouble(str1);
                }
                if(input.contains("+"+str)||input.contains("−"+str)||input.contains("×"+str)||input.contains("÷"+str)){
                    input = input.replace(str, Math.sinh(a) + "");
                }
                else {
                    input = input.replace(str,"×" + Math.sinh(a));
                }
            }
            if(input.startsWith("×")){
                input=input.substring(1);
            }
            input=input.replaceAll("-","−");
        }
        while(input.contains("cosh")) {
            String reg = "cosh\\(?(−?[0-9.]+)";
            Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find()) {
                String str=m.group(0),str1=m.group(1);
                double a;
                if(str1.contains("−")){
                    a=-Double.parseDouble(str1.substring(1,str1.length()));
                } else {
                    a=Double.parseDouble(str1);
                }
                if(input.contains("+"+str)||input.contains("−"+str)||input.contains("×"+str)||input.contains("÷"+str)){
                    input = input.replace(str, Math.cosh(a) + "");
                }
                else {
                    input = input.replace(str,"×" + Math.cosh(a));
                }
            }
            if(input.startsWith("×")){
                input=input.substring(1);
            }
            input=input.replaceAll("-","−");
        }
        while(input.contains("tanh")) {
            System.out.println(input);
            String reg = "tanh\\(?(−?[0-9.]+)";
            Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find()) {
                String str=m.group(0),str1=m.group(1);
                double a;
                if(str1.contains("−")){
                    a=-Double.parseDouble(str1.substring(1));
                } else {
                    a=Double.parseDouble(str1);
                }
                if(input.contains("+"+str)||input.contains("−"+str)||input.contains("×"+str)||input.contains("÷"+str)){
                    input = input.replace(str, Math.tanh(a) + "");
                }
                else {
                    input = input.replace(str,"×" + Math.tanh(a));
                }
            }
            if(input.startsWith("×")){
                input=input.substring(1);
            }
            input=input.replaceAll("-","−");
        }
        while(input.contains("sin")) {
            String reg = "sin\\(?(−?[0-9.]+)";
            Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find()) {
                String str=m.group(0),str1=m.group(1);
                double a;
                if(str1.contains("−")){
                    a=-Double.parseDouble(str1.substring(1));
                } else {
                    a=Double.parseDouble(str1);
                }
                if(input.contains("+"+str)||input.contains("−"+str)||input.contains("×"+str)||input.contains("÷"+str)){
                    input = input.replace(str, Math.sin(a) + "");
                }
                else {
                    input = input.replace(str,"×" + Math.sin(a));
                }
            }
            if(input.startsWith("×")){
                input=input.substring(1);
            }
            input=input.replaceAll("-","−");
        }
        while(input.contains("cos")) {
            String reg = "cos\\(?(−?[0-9.]+)";
            Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find()) {
                String str=m.group(0),str1=m.group(1);
                double a;
                if(str1.contains("−")){
                    a=-Double.parseDouble(str1.substring(1));
                } else {
                    a=Double.parseDouble(str1);
                }
                if(input.contains("+"+str)||input.contains("−"+str)||input.contains("×"+str)||input.contains("÷"+str)){
                    input = input.replace(str, Math.cos(a) + "");
                }
                else {
                    input = input.replace(str,"×" + Math.cos(a));
                }
            }
            if(input.startsWith("×")){
                input=input.substring(1);
            }
            input=input.replaceAll("-","−");
        }
        while(input.contains("tan")) {
            System.out.println("tan");
            String reg = "tan\\(?(−?[0-9.]+)";
            Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find()) {
                String str=m.group(0),str1=m.group(1);
                double a;
                if(str1.contains("−")){
                    a=-Double.parseDouble(str1.substring(1));
                } else {
                    a=Double.parseDouble(str1);
                }
                if(input.contains("+"+str)||input.contains("−"+str)||input.contains("×"+str)||input.contains("÷"+str)){
                    input = input.replace(str, Math.tan(a) + "");
                }
                else {
                    input = input.replace(str,"×" + Math.tan(a));
                }
            }
            if(input.startsWith("×")){
                input=input.substring(1);
            }
            input=input.replaceAll("-","−");
        }
        while(input.contains("ln")) {
            String reg = "ln\\(?(−?[0-9.]+)";
            Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find()) {
                String str=m.group(0),str1=m.group(1);
                double a;
                if(str1.contains("−")){
                    a=-Double.parseDouble(str1.substring(1));
                } else {
                    a=Double.parseDouble(str1);
                }
                if(input.contains("+"+str)||input.contains("−"+str)||input.contains("×"+str)||input.contains("÷"+str)){
                    input = input.replace(str, Math.log(a) + "");
                }
                else {
                    input = input.replace(str,"×" + Math.log(a));
                }
            }
            if(input.startsWith("×")){
                input=input.substring(1);
            }
            input=input.replaceAll("-","−");
        }
        while(input.contains("lg")) {
            String reg = "lg\\(?(−?[0-9.]+)";
            Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find()) {
                String str=m.group(0),str1=m.group(1);
                double a;
                if(str1.contains("−")){
                    a=-Double.parseDouble(str1.substring(1));
                } else {
                    a=Double.parseDouble(str1);
                }
                if(input.contains("+"+str)||input.contains("−"+str)||input.contains("×"+str)||input.contains("÷"+str)){
                    input = input.replace(str, Math.log10(a) + "");
                }
                else {
                    input = input.replace(str,"×" + Math.log10(a));
                }
            }
            if(input.startsWith("×")){
                input=input.substring(1);
            }
            input=input.replaceAll("-","−");
        }
        while(input.contains("e")) {
            String reg = "e\\^(−?[0-9.]+)";
            Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find()) {
                String str=m.group(0),str1=m.group(1);
                System.out.println(str1);
                double a;
                if(str1.contains("−")){
                    a=-Double.parseDouble(str1.substring(1));
                } else {
                    a=Double.parseDouble(str1);
                }                   b=Double.parseDouble(str2);
                }
                input=input.replace(m.group(1),Math.pow(a,b)+"");
            }
            input=input.replaceAll("-","−");
        }
        while(input.contains("√")) {
            String reg = "√\\(?([0-9.]+)";
            Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find()) {
                String str=m.group(0),str1=m.group(1);
                double a;
                a=Double.parseDouble(str1);
                if(input.contains("+"+str)||input.contains("−"+str)||input.contains("×"+str)||input.contains("÷"+str)){
                    input = input.replace(str, Math.sqrt(a) + "");
                }
                else {
                    input = input.replace(str,"×" + Math.sqrt(a));
                }
            }
            if(input.startsWith("×")){
                input=input.substring(1);
            }
            input=input.replaceAll("-","−");
        }
        while(input.contains("%")){
            String reg = "((\\d*\\.*\\d+)%)";
            Pattern p=Pattern.compile(reg);
            Matcher m = p.matcher(input);
            while(m.find()){
                double a=0.01*Double.parseDouble(m.group(2));
                input=input.replace(m.group(1),a+"");
            }
        }
        while(input.contains("×")||input.contains("÷")) {
            String reg = "((−?\\d*\\.*\\d+)[×÷](−?\\d*\\.*\\d+))";
            Pattern p = Pattern.compile(reg);
            Matcher m = p.matcher(input);
            while (m.find()){
                double a,b;
                String str=m.group(0),str1=m.group(2).toString(),str2=m.group(3).toString();
                if(str1.contains("−")){
                    a=-Double.parseDouble(str1.substring(1,str1.length()));
                } else {
                    a=Double.parseDouble(str1);
                }
                if(str2.contains("−")){
                    b=-Double.parseDouble(str2.substring(1,str2.length()));
                } else {
                    b=Double.parseDouble(str2);
                }
                if (str.contains("×")){
                    input=input.replace(str,a*b+"");
                } else {
                    if(Math.abs(b)<1e-5) {return "error";}
                    input=input.replace(str,a/b+"");
                }
            }
        }
        if(input.contains("E")){
            input="error";
        }
        input=input.replace("-","−");
        while(input.contains("+")||input.contains("−")){
            if(input.matches("^−\\d*\\.*\\d+$")) {
                break;
            };
            String reg = "((−?\\d*\\.*\\d+)[+−](−?\\d*\\.*\\d+))";
            Pattern p = Pattern.compile(reg);
            Matcher m = p.matcher(input);
            while (m.find()){
                double a,b;
                String str=m.group(0),str1=m.group(2).toString(),str2=m.group(3).toString();
                if(str1.contains("−")){
                    a=-Double.parseDouble(str1.substring(1,str1.length()));
                } else {
                    a=Double.parseDouble(str1);
                }
                if(str2.contains("−")){
                    b=-Double.parseDouble(str2.substring(1,str2.length()));
                } else {
                    b=Double.parseDouble(str2);
                }
                if (str.contains("+")){
                    input=input.replace(str,a+b+"");
                } else {
                    input=input.replace(str,a-b+"");
                }
            }
            input=input.replaceAll("-","−");
        }
        if(!input.matches("−?\\d*\\.*\\d+")){
            input="error!";
        }
        if(input.matches("^.*\\.0$")){
            int len=input.length();
            input=input.substring(0,len-2);
        }
        return input;
    }
}

竖屏布局xml文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:ignore="NewApi"
    android:theme="@android:style/Theme.Black.NoTitleBar"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/input_number"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:clickable="true"
        android:gravity="right"
        android:textColor="@color/button_one"
        android:textSize="60sp"
        app:layout_constraintBottom_toTopOf="@+id/out_number"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/out_number"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:clickable="true"
        android:gravity="right"
        android:textColor="#c0c0c0"
        android:textSize="40sp"
        app:layout_constraintBottom_toTopOf="@+id/GridLayout1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.662" />
    <GridLayout
        android:id="@+id/GridLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:columnCount="4"
        android:rowCount="5"
        app:layout_constraintBottom_toBottomOf="parent">

        <Button
            android:id="@+id/number1"
            style="@style/btn_nomal_style"
            android:layout_row="3"
            android:layout_column="0"
            android:text="1" />

        <Button
            android:id="@+id/number2"
            style="@style/btn_nomal_style"
            android:layout_row="3"
            android:layout_column="1"
            android:text="2" />

        <Button
            android:id="@+id/number3"
            style="@style/btn_nomal_style"
            android:layout_row="3"
            android:layout_column="2"
            android:text="3" />

        <Button
            android:id="@+id/number4"
            style="@style/btn_nomal_style"
            android:layout_row="2"
            android:layout_column="0"
            android:text="4" />

        <Button
            android:id="@+id/number5"
            style="@style/btn_nomal_style"
            android:layout_row="2"
            android:layout_column="1"
            android:text="5" />

        <Button
            android:id="@+id/number6"
            style="@style/btn_nomal_style"
            android:layout_row="2"
            android:layout_column="2"
            android:text="6" />

        <Button
            android:id="@+id/number7"
            style="@style/btn_nomal_style"
            android:layout_row="1"
            android:layout_column="0"
            android:text="7" />

        <Button
            android:id="@+id/number8"
            style="@style/btn_nomal_style"
            android:layout_row="1"
            android:layout_column="1"
            android:text="8" />

        <Button
            android:id="@+id/number9"
            style="@style/btn_nomal_style"
            android:layout_row="1"
            android:layout_column="2"
            android:text="9"
            />

        <Button
            android:id="@+id/number0"
            style="@style/btn_nomal_style"
            android:layout_row="4"
            android:layout_column="1"
            android:text="0" />

        <Button
            android:id="@+id/clear"
            style="@style/btn_nomal_style"
            android:layout_row="0"
            android:layout_column="0"
            android:text="C"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/back"
            style="@style/btn_nomal_style"
            android:layout_row="0"
            android:layout_column="1"
            android:text="CE"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/add"
            style="@style/btn_nomal_style"
            android:layout_row="3"
            android:layout_column="3"
            android:text="+"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/min"
            style="@style/btn_nomal_style"
            android:layout_row="2"
            android:layout_column="3"
            android:text="−"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/mul"
            style="@style/btn_nomal_style"
            android:layout_row="1"
            android:layout_column="3"
            android:text="×"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/div"
            style="@style/btn_nomal_style"
            android:layout_row="0"
            android:layout_column="3"
            android:text="÷"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/dot"
            style="@style/btn_nomal_style"
            android:layout_row="4"
            android:layout_column="2"
            android:text="." />

        <Button
            android:id="@+id/equal"
            style="@style/btn_nomal_style"
            android:layout_row="4"
            android:layout_column="3"
            android:text="="
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/symbol"
            style="@style/btn_nomal_style"
            android:layout_row="0"
            android:layout_column="2"
            android:text="+/−"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/percent"
            style="@style/btn_nomal_style"
            android:layout_row="4"
            android:layout_column="0"
            android:text="%" />


    </GridLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

横屏布局xml文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:ignore="NewApi"
    android:theme="@android:style/Theme.Black.NoTitleBar"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/input_number"
        android:layout_width="match_parent"
        android:layout_height="57sp"
        android:clickable="true"
        android:gravity="right"
        android:textColor="@color/button_one"
        android:textSize="45sp"
        app:layout_constraintBottom_toTopOf="@+id/out_number"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/out_number"
        android:layout_width="match_parent"
        android:layout_height="25sp"
        android:clickable="true"
        android:gravity="right"
        android:textColor="#c0c0c0"
        android:textSize="20sp"
        app:layout_constraintBottom_toTopOf="@+id/GridLayout1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.90" />

    <GridLayout
        android:id="@+id/GridLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:columnCount="8"
        android:rowCount="6"
        app:layout_constraintBottom_toBottomOf="parent">

        <Button
            android:id="@+id/mc"
            style="@style/btn_nomal_style_land"
            android:layout_row="0"
            android:layout_column="4"
            android:text="mc" />
        <Button
            android:id="@+id/madd"
            style="@style/btn_nomal_style_land"
            android:layout_row="0"
            android:layout_column="5"
            android:text="m+" />

        <Button
            android:id="@+id/mmin"
            style="@style/btn_nomal_style_land"
            android:layout_row="0"
            android:layout_column="6"
            android:text="m−" />

        <Button
            android:id="@+id/tenX"
            style="@style/btn_nomal_style_land"
            android:layout_row="0"
            android:layout_column="3"
            android:text="10ˣ" />

        <Button
            android:id="@+id/yX"
            style="@style/btn_nomal_style_land"
            android:layout_row="1"
            android:layout_column="3"
            android:text="yˣ" />

        <Button
            android:id="@+id/lg"
            style="@style/btn_nomal_style_land"
            android:layout_row="2"
            android:layout_column="3"
            android:text="lg" />

        <Button
            android:id="@+id/ln"
            style="@style/btn_nomal_style_land"
            android:layout_row="3"
            android:layout_column="3"
            android:text="ln" />

        <Button
            android:id="@+id/eX"
            style="@style/btn_nomal_style_land"
            android:layout_row="4"
            android:layout_column="3"
            android:text="eˣ" />

        <Button
            android:id="@+id/right_bracket"
            style="@style/btn_nomal_style_land"
            android:layout_row="0"
            android:layout_column="2"
            android:text=")" />

        <Button
            android:id="@+id/left_bracket"
            style="@style/btn_nomal_style_land"
            android:layout_row="0"
            android:layout_column="1"
            android:text="(" />

        <Button
            android:id="@+id/twoND"
            style="@style/btn_nomal_style_land"
            android:layout_row="0"
            android:layout_column="0"
            android:text="2nd" />

        <Button
            android:id="@+id/reciprocal"
            style="@style/btn_nomal_style_land"
            android:layout_row="1"
            android:layout_column="0"
            android:text="1/x" />

        <Button
            android:id="@+id/factorial"
            style="@style/btn_nomal_style_land"
            android:layout_row="2"
            android:layout_column="0"
            android:text="x!" />

        <Button
            android:id="@+id/sin"
            style="@style/btn_nomal_style_land"
            android:layout_row="3"
            android:layout_column="0"
            android:text="sin" />

        <Button
            android:id="@+id/sinh"
            style="@style/btn_nomal_style_land"
            android:layout_row="4"
            android:layout_column="0"
            android:text="sinh" />

        <Button
            android:id="@+id/rad"
            style="@style/btn_nomal_style_land"
            android:layout_row="5"
            android:layout_column="0"
            android:text="Rad" />

        <Button
            android:id="@+id/square"
            style="@style/btn_nomal_style_land"
            android:layout_row="1"
            android:layout_column="1"
            android:text="x²" />

        <Button
            android:id="@+id/sqrt"
            style="@style/btn_nomal_style_land"
            android:layout_row="2"
            android:layout_column="1"
            android:text="√" />

        <Button
            android:id="@+id/cos"
            style="@style/btn_nomal_style_land"
            android:layout_row="3"
            android:layout_column="1"
            android:text="cos" />

        <Button
            android:id="@+id/cosh"
            style="@style/btn_nomal_style_land"
            android:layout_row="4"
            android:layout_column="1"
            android:text="cosh" />

        <Button
            android:id="@+id/pai"
            style="@style/btn_nomal_style_land"
            android:layout_row="5"
            android:layout_column="1"
            android:text="π" />

        <Button
            android:id="@+id/cubic"
            style="@style/btn_nomal_style_land"
            android:layout_row="1"
            android:layout_column="2"
            android:text="x³" />

        <Button
            android:id="@+id/Xy"
            style="@style/btn_nomal_style_land"
            android:layout_row="2"
            android:layout_column="2"
            android:text="ˣ√y" />

        <Button
            android:id="@+id/tan"
            style="@style/btn_nomal_style_land"
            android:layout_row="3"
            android:layout_column="2"
            android:text="tan" />

        <Button
            android:id="@+id/tanh"
            style="@style/btn_nomal_style_land"
            android:layout_row="4"
            android:layout_column="2"
            android:text="tanh" />

        <Button
            android:id="@+id/EE"
            style="@style/btn_nomal_style_land"
            android:layout_row="5"
            android:layout_column="2"
            android:text="EE" />

        <Button
            android:id="@+id/rand"
            style="@style/btn_nomal_style_land"
            android:layout_row="5"
            android:layout_column="3"
            android:text="Rand" />

        <Button
            android:id="@+id/mmul"
            style="@style/btn_nomal_style_land"
            android:layout_row="0"
            android:layout_column="7"
            android:text="mr" />

        <Button
            android:id="@+id/number1"
            style="@style/btn_nomal_style_land"
            android:layout_row="4"
            android:layout_column="4"
            android:text="1" />

        <Button
            android:id="@+id/number2"
            style="@style/btn_nomal_style_land"
            android:layout_row="4"
            android:layout_column="5"
            android:text="2" />

        <Button
            android:id="@+id/number3"
            style="@style/btn_nomal_style_land"
            android:layout_row="4"
            android:layout_column="6"
            android:text="3" />

        <Button
            android:id="@+id/number4"
            style="@style/btn_nomal_style_land"
            android:layout_row="3"
            android:layout_column="4"
            android:text="4" />

        <Button
            android:id="@+id/number5"
            style="@style/btn_nomal_style_land"
            android:layout_row="3"
            android:layout_column="5"
            android:text="5" />

        <Button
            android:id="@+id/number6"
            style="@style/btn_nomal_style_land"
            android:layout_row="3"
            android:layout_column="6"
            android:text="6" />

        <Button
            android:id="@+id/number7"
            style="@style/btn_nomal_style_land"
            android:layout_row="2"
            android:layout_column="4"
            android:text="7" />

        <Button
            android:id="@+id/number8"
            style="@style/btn_nomal_style_land"
            android:layout_row="2"
            android:layout_column="5"
            android:text="8" />

        <Button
            android:id="@+id/number9"
            style="@style/btn_nomal_style_land"
            android:layout_row="2"
            android:layout_column="6"
            android:text="9"
            />

        <Button
            android:id="@+id/number0"
            style="@style/btn_nomal_style_land"
            android:layout_row="5"
            android:layout_column="5"
            android:text="0" />

        <Button
            android:id="@+id/clear"
            style="@style/btn_nomal_style_land"
            android:layout_row="1"
            android:layout_column="4"
            android:text="C"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/back"
            style="@style/btn_nomal_style_land"
            android:layout_row="1"
            android:layout_column="5"
            android:text="CE"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/add"
            style="@style/btn_nomal_style_land"
            android:layout_row="4"
            android:layout_column="7"
            android:text="+"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/min"
            style="@style/btn_nomal_style_land"
            android:layout_row="3"
            android:layout_column="7"
            android:text="−"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/mul"
            style="@style/btn_nomal_style_land"
            android:layout_row="2"
            android:layout_column="7"
            android:text="×"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/div"
            style="@style/btn_nomal_style_land"
            android:layout_row="1"
            android:layout_column="7"
            android:text="÷"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/dot"
            style="@style/btn_nomal_style_land"
            android:layout_row="5"
            android:layout_column="6"
            android:text="." />

        <Button
            android:id="@+id/equal"
            style="@style/btn_nomal_style_land"
            android:layout_row="5"
            android:layout_column="7"
            android:text="="
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/symbol"
            style="@style/btn_nomal_style_land"
            android:layout_row="1"
            android:layout_column="6"
            android:text="+/−"
            android:textColor="@color/button_one" />

        <Button
            android:id="@+id/percent"
            style="@style/btn_nomal_style_land"
            android:layout_row="5"
            android:layout_column="4"
            android:text="%" />


    </GridLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

你可能感兴趣的:(Android)