基于Android studio和java开发的计算器
具体模块有:启动页,第一次安装引导页(只在第一次安装软件时候出现)和计算器主界面
可以在主界面按返回键两次才返回
看网上的相关软件都不完善功能也较少,网上大多都是没有启动页只有一个主界面的,于是就自己写了一个功能全面的。
启动页:3s时长
引导界面(只在第一次安装软件出现):
计算器主界面:
计算器页面布局代码:
<?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:background="@color/white"
android:orientation="vertical"
android:padding="5dp">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical">
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lines="5"
android:scrollbars="vertical"
android:focusable="true"
android:focusableInTouchMode="true"
android:textSize="50dp"
android:gravity="right|bottom"
android:textColor="@color/black"
android:text="0"/>
</LinearLayout>
</ScrollView>
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="3"
android:rowCount="1">
<Button
android:id="@+id/cancel"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:text="C"
android:background="@drawable/btn_bg"
android:textColor="#FF6600"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/multiply"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:background="@drawable/btn_bg"
android:gravity="center"
android:text="×"
android:textColor="#CC6600"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/division"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="÷"
android:textColor="#CC6600"
android:textSize="@dimen/button_font"/>
</GridLayout>
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="4"
android:rowCount="5">
<Button
android:id="@+id/number7"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="7"
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/number8"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="8"
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/number9"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="9"
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/add"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:background="@drawable/btn_bg"
android:gravity="center"
android:text="+"
android:textColor="#CC6600"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/number4"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="4"
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/number5"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="5"
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/number6"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="6"
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/sub"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="-"
android:textColor="#CC6600"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/number1"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="1"
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/number2"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="2"
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/number3"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="3"
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/sqrt"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="√"
android:textColor="#CC6600"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/sem"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="1/x"
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/number0"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="0"
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/point"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="."
android:textColor="@color/black"
android:textSize="@dimen/button_font"/>
<Button
android:id="@+id/equal"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_columnWeight="1"
android:gravity="center"
android:background="@drawable/btn_bg"
android:text="="
android:textColor="#CC6600"
android:textSize="@dimen/button_font"/>
</GridLayout>
</LinearLayout>
计算器功能实现部分代码。
public class MainActivity2 extends AppCompatActivity implements View.OnClickListener {
private TextView tv1;
private String firstNum="";
private String secondNum="";
private String operator="";
private String result="";
private String showText="";
private long mExitTime=0;
int i=0;
int j=0;
int k=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
tv1 = findViewById(R.id.tv1);
findViewById(R.id.cancel).setOnClickListener(this);
findViewById(R.id.division).setOnClickListener(this);
findViewById(R.id.multiply).setOnClickListener(this);
findViewById(R.id.number7).setOnClickListener(this);
findViewById(R.id.number8).setOnClickListener(this);
findViewById(R.id.number9).setOnClickListener(this);
findViewById(R.id.add).setOnClickListener(this);
findViewById(R.id.number4).setOnClickListener(this);
findViewById(R.id.number5).setOnClickListener(this);
findViewById(R.id.number6).setOnClickListener(this);
findViewById(R.id.sub).setOnClickListener(this);
findViewById(R.id.number1).setOnClickListener(this);
findViewById(R.id.number2).setOnClickListener(this);
findViewById(R.id.number3).setOnClickListener(this);
findViewById(R.id.sqrt).setOnClickListener(this);
findViewById(R.id.sem).setOnClickListener(this);
findViewById(R.id.number0).setOnClickListener(this);
findViewById(R.id.point).setOnClickListener(this);
findViewById(R.id.equal).setOnClickListener(this);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// 按下BACK,同时没有重复
Log.d("HT", "onKeyDown()");
exit();
return true;
}
return super.onKeyDown(keyCode, event);
}
public void exit() {
Log.d("Timess", "" + (System.currentTimeMillis() - mExitTime) );
if ((System.currentTimeMillis() - mExitTime) > 2000) {
Toast.makeText(this, "再按一次退出应用", Toast.LENGTH_SHORT).show();
mExitTime = System.currentTimeMillis();
} else {
Toast.makeText(this, "退出应用", Toast.LENGTH_SHORT).show();
finish();// app为Application的子类的对象,参考我的另一个博客
}
}
@Override
public void onClick(View view) {
String inputText;
if (view.getId()==R.id.sqrt){
inputText="√";
}
else {
inputText=(((TextView)view).getText().toString());
}
switch (view.getId()){
case R.id.cancel:
clear();
break;
case R.id.add:
case R.id.sub:
case R.id.division:
case R.id.multiply:
try {
i=0;
k=1;
operator=inputText;
refreshText(showText+operator);
} catch (Exception e) {
refreshText("出错啦!请正确使用");
}
break;
case R.id.equal:
if (operator.length()>0&&secondNum==""){
refreshText("出错啦!请正确使用");
}
else if (firstNum==""&&secondNum==""){
refreshText("出错啦!请正确使用");
}
else if ((firstNum.length()>0)&&(secondNum=="")&&j==0&&i==0){
refreshText(showText+"="+showText);
}
else if (j==1){
refreshText(showText+"="+result);
j=0;
}
else {
double calculate_result = calculaterFour();
refreshOperate(String.valueOf(calculate_result));
refreshText(showText + "=" + result);
}
}
break;
case R.id.sqrt:
if (firstNum.length()==0&&secondNum.length()==0){
refreshText("出错啦!请正确使用");
}
else if (k==1){
refreshText("出错啦!请先输入数字再输入√");
k=0;
}
else {
double sqrt_result=Math.sqrt(Double.parseDouble(firstNum));
i=1;
k=0;
//refreshOperate(String.valueOf(sqrt_result));
secondNum=String.valueOf(sqrt_result);
refreshText(showText+"√");}
break;
case R.id.sem:
if (firstNum.length()==0&&secondNum.length()==0){
refreshText("出错啦!请正确使用");
}
else if (firstNum.length()!=0&&secondNum.length()!=0){
double sem=1.0/Double.parseDouble(secondNum);
secondNum=String.valueOf(sem);
refreshText(showText+"/1");
}
else if (k==1){
refreshText("出错啦!请先输入数字再输入/1");
k=0;
}
else {
j=1;
double sem=1.0/Double.parseDouble(firstNum);
refreshOperate(String.valueOf(sem));
refreshText(showText+"/1");
}
}
break;
//点击数字和小数点
default:
if (result.length()>0&&operator.equals("")){
clear();
k=0;
}
if (operator.equals("")){
firstNum=firstNum+inputText;
k=0;
}
else {
secondNum=secondNum+inputText;
k=0;
}
if (inputText.equals(".")){
//refreshText(inputText);
refreshText(showText +inputText);
k=0;
}
/*if (showText.equals("0")&&inputText.equals(".")){
//refreshText(inputText);
refreshText(showText + "2"+inputText);
}*/
else {
refreshText(showText +inputText);
k=0;
}
}
break;
}
}
private double calculaterFour() {
switch (operator){
case"+":
return Double.parseDouble(firstNum)+Double.parseDouble(secondNum);
case"-":
return Double.parseDouble(firstNum)-Double.parseDouble(secondNum);
case"×":
return Double.parseDouble(firstNum)*Double.parseDouble(secondNum);
default:
return Double.parseDouble(firstNum)/Double.parseDouble(secondNum);
}
}
private void clear() {
refreshOperate("");
refreshText("");
}
private void refreshOperate(String new_result){
result=new_result;
firstNum=result;
secondNum="";
operator="";
}
private void refreshText(String text){
showText=text;
tv1.setText(showText);
}
}
经过后来修改,没有bug的版本在下面链接。
附上项目下载链接:Android项目基于Androidstudio开发的计算器软件-Android文档类资源-CSDN下载