目录
一、测试环境说明
电脑环境
Windows 11
编写语言
JAVA
开发软件
Android Studio (2020)
开发软件只要大于等于测试版本即可(近几年官网直接下载也可以),若是版本低于测试版本请自行测试。项目需要根据你的软件自行适配
二、项目简介
该项目简介来自网络,具体内容需要自行测试
本项目是一款基于Android平台的科学计算器应用,采用Java开发,支持基础运算和高级科学计算功能。
核心算法通过递归解析实现复杂表达式的运算,确保正确的计算顺序和优先级处理。界面采用LinearLayout与TableLayout结合,提供清晰的操作面板,适配不同屏幕尺寸。
主要功能包括四则运算、三角函数(sin/cos/tan)、反三角函数、对数运算(ln/lg)、幂运算(x²、√x、x^y)、阶乘、百分比等,并支持π和e常数的快捷输入。
具备错误检测机制,对非法表达式(如除零、负数开方)进行提示。通过Bundle保存计算状态,防止屏幕旋转时数据丢失。
适用于学生、工程师等需要进行科学计算的场景,兼具易用性和功能性,未来可扩展更多高级计算模块。
三、项目演示
网络资源模板--基于Android studio 计算器App
四、部设计详情(部分)
科学计算器
1. 页面的结构
这个科学计算器采用垂直线性布局,分为上下两部分。上半部分是显示区域,包含两个横向滚动文本框,分别显示历史表达式和当前输入内容。
下半部分是操作区域,采用表格布局排列各种功能按钮,共5行7列。按钮按照功能分组排列,第一行是高级运算符号,中间三行是数字和基础运算符,最后一行是特殊功能键。
整体布局清晰合理,充分利用屏幕空间,操作区域占比较大便于触控操作。
2. 使用到的技术
该计算器采用Android原生开发技术,使用Java语言编写业务逻辑。
核心算法通过递归方式实现表达式解析和计算,支持括号嵌套和运算符优先级处理。界面使用XML定义,包含TextView、Button、ToggleButton等多种控件。
采用了HorizontalScrollView实现文本横向滚动,TableLayout规整排列按钮。通过状态保存机制处理屏幕旋转等配置变更,使用Toast显示临时提示信息。
整体技术方案成熟稳定,兼顾功能性和用户体验。
3. 页面详细介绍
这个科学计算器页面功能丰富,支持基本四则运算和高级科学计算。包含三角函数(sin/cos/tan)及其反函数、对数运算(ln/lg)、幂运算(平方/开方)、阶乘、百分比等科学功能。
特别设计了Shift切换键实现函数反变换,π和e常数一键输入。界面采用圆角矩形设计,按钮大小均匀,操作反馈直观。输入区支持长表达式显示和编辑,错误输入会提示"错误"信息。
整体设计兼顾美观性和实用性,适合需要进行复杂科学计算的场景使用。
<?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"
android:layout_margin="8dp"
android:orientation="vertical"
tools:context="brookelovesummer.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:background="@drawable/bg_corner"
android:orientation="vertical"
android:paddingHorizontal="12dp"
android:paddingVertical="6dp">
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_last"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:singleLine="true"
android:text="2000+233"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textIsSelectable="true" />
</HorizontalScrollView>
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:singleLine="true"
android:text="2233"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textIsSelectable="true" />
</HorizontalScrollView>
</LinearLayout>
<TableLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingHorizontal="4dp">
<Button
android:id="@+id/button_factorial"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="!"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_lbracket"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="("
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_rbracket"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text=")"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_clear"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="C"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_div"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="÷"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_mul"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="×"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<ImageButton
android:id="@+id/button_del"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:contentDescription="Delete"
android:onClick="onClick"
app:srcCompat="@drawable/ic_backspace_24" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingHorizontal="4dp">
<Button
android:id="@+id/button_square"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="x²"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_sqrt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="√"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_pow"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="^"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_7"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="7"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_8"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="8"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_9"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="9"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_sub"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="-"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingHorizontal="4dp">
<Button
android:id="@+id/button_ln"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="ln"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_lg"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="lg"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_e"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="e"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_4"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="4"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_5"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="5"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_6"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="6"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_add"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="+"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingHorizontal="4dp">
<Button
android:id="@+id/button_sin"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="sin"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_cos"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="cos"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_tan"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="tan"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="1"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="2"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_3"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="3"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_percent"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="%"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingHorizontal="4dp">
<ToggleButton
android:id="@+id/button_shift"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textOff="Shift"
android:textOn="Shift" />
<Button
android:id="@+id/button_rad"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="Rad"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_pi"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="π"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_E"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="10^"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_0"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="0"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_point"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="."
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/button_equal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginHorizontal="4dp"
android:layout_weight="1"
android:onClick="onClick"
android:text="="
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
</TableRow>
</TableLayout>
</LinearLayout>
五、项目源码
👇👇👇👇👇快捷方式👇👇👇👇👇