利用Android stdio实现较复杂计算器
Java代码
package com.gb;
import androidx.appcompat.app.AppCompatActivity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.text.InputType;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import org.javia.arity.Symbols;
import org.javia.arity.SyntaxException;
import java.math.BigDecimal;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btn_0,btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_7,btn_8,btn_9,btn_pt;
Button btn_mul,btn_div,btn_add,btn_sub,btn_yu;
Button btn_clr,btn_del,btn_eq;
EditText et_input;
Button sin,tan,cos,lg,ln,sqrt,square,cubic,factorial;
Button twoND,eightND,symbol,leftk,rightk,reciprocal,Exit;
boolean clr_flag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText edit=(EditText)findViewById(R.id.et_input);
edit.setInputType(InputType.TYPE_NULL);
Configuration config = getResources().getConfiguration();
if(config.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
sin= (Button) findViewById(R.id.sin);
cos= (Button) findViewById(R.id.cos);
tan= (Button) findViewById(R.id.tan);
lg= (Button) findViewById(R.id.lg);
ln= (Button) findViewById(R.id.ln);
sqrt= (Button) findViewById(R.id.sqrt);//开根号
square= (Button) findViewById(R.id.square);//平方
cubic= (Button) findViewById(R.id.cubic);//立方
factorial= (Button) findViewById(R.id.factorial);//阶乘
twoND= (Button) findViewById(R.id.twoND);
eightND= (Button) findViewById(R.id.eightND);
symbol= (Button) findViewById(R.id.H);//正负号
leftk= (Button) findViewById(R.id.leftk);
rightk= (Button) findViewById(R.id.rightk);
reciprocal= (Button) findViewById(R.id.reciprocal); //倒数
}
btn_0= (Button) findViewById(R.id.btn_0);
btn_1= (Button) findViewById(R.id.btn_1);
btn_2= (Button) findViewById(R.id.btn_2);
btn_3= (Button) findViewById(R.id.btn_3);
btn_4= (Button) findViewById(R.id.btn_4);
btn_5= (Button) findViewById(R.id.btn_5);
btn_6= (Button) findViewById(R.id.btn_6);
btn_7= (Button) findViewById(R.id.btn_7);
btn_8= (Button) findViewById(R.id.btn_8);
btn_9= (Button) findViewById(R.id.btn_9);
btn_pt= (Button) findViewById(R.id.btn_pt);
btn_add= (Button) findViewById(R.id.btn_add);
btn_sub= (Button) findViewById(R.id.btn_sub);
btn_mul= (Button) findViewById(R.id.btn_mul);
btn_div= (Button) findViewById(R.id.btn_div);
btn_yu= (Button) findViewById(R.id.btn_yu);
btn_clr= (Button) findViewById(R.id.btn_clr);
btn_del= (Button) findViewById(R.id.btn_del);
btn_eq= (Button) findViewById(R.id.btn_eq);
et_input= (EditText) findViewById(R.id.et_input);
Exit= (Button) findViewById(R.id.Exit);//退出程序
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
TextView textView1 = findViewById(R.id.et_input);//获取竖屏时结果区
BigDecimal output1 = new BigDecimal(textView1.getText().toString());
int bitPos1 = textView1.getText().toString().indexOf(".");
int i1 = (int) (textView1.getText().toString().length() - bitPos1 - 1);//获取小数点后有多少位
switch (keyCode) {
// 音量减小
case KeyEvent.KEYCODE_VOLUME_DOWN:
String test1 = output1.setScale(i1 - 1, BigDecimal.ROUND_HALF_UP).toString();//设置小数点位数为i-1位
textView1.setText(test1);
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
String test3 = output1.setScale(i1 + 1, BigDecimal.ROUND_HALF_UP).toString();//设置小数点位数为i-1位
textView1.setText(test3);
return true;
}
return super.onKeyDown(keyCode, event);
}//音量调整小数