部分代码还有待优化,奋斗吧,呆萌一族 ~ ~ ~
功能实现
-
数字的输入
- 注意事项:
- 小数点的输入:不能出现两个的小数点
- 0 的输入:不能出现0000的情况
-
计算结果
- 对输入内容的判空
- 除法运算中除数不能为0
源码分析
-
声明变量:
private Button apoint; //代表小数点的按钮 private Button equal; //代表等于号的按钮 private ToggleButton toggleButton; //用来切换向上面和向下面的文本框输入的按钮 private Button[] b; //数字0-9的按钮 private Button back; //撤销按钮 private boolean isOn = true; //默认的向上面文本框输入 private EditText edit1; //上面的文本框 private EditText edit2; // 下面的文本框 private ArrayAdapter<String> adapter; private Spinner spinner; //记录选择的符号的按钮
-
0的输入:如果原来的字符串转化为浮点数时是0.0,意味着继续输入0时将不能执行,否则会出现00000的情况
private void addZero(boolean isDoubleZero) { if (isOn) { if (!edit1.getText().toString().equals("")) { if (Double.parseDouble(edit1.getText().toString()) != 0.0) { if (isDoubleZero) { edit1.append("00"); } else { edit1.append("0"); } } } } else { if (!edit2.getText().toString().equals("")) { if (Double.parseDouble(edit2.getText().toString()) != 0.0) { edit2.append("0"); if (isDoubleZero) { edit2.append("00"); } else { edit2.append("0"); } } } } }
-
小数点的输入:当原来的字符串含有 "." 时,则不能继续输入
private void addPoint() { Log.d("item", "addPoint"); if (isOn) { if (!edit1.getText().toString().contains(".")) { edit1.append("."); } } else { if (!edit2.getText().toString().contains(".")) { edit2.append("."); } } }
-
对Spinner 的设置
spinner = (Spinner) findViewById(R.id.spinner); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { select = list.get(position); } @Override public void onNothingSelected(AdapterView<?> parent) { } });
成品图片
全部代码
MainActivity:
package activitytest.example.com.log_calculater;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.ToggleButton;
import java.util.ArrayList;
import java.util.List;
import static activitytest.example.com.log_calculater.R.id.a2;
public class MainActivity extends AppCompatActivity {
private Button apoint;
private Button equal;
private ToggleButton toggleButton;
private Button[] b;
private Button back;
private boolean isOn = true;
private EditText edit1;
private EditText edit2;
private ArrayAdapter<String> adapter;
private Spinner spinner;
private String select;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final List<String> list = new ArrayList<String>();
list.add("+");
list.add("-");
list.add("*");
list.add("/");
list.add("^");
b = new Button[11];
b[1] = (Button) findViewById(R.id.a1);
b[2] = (Button) findViewById(a2);
b[3] = (Button) findViewById(R.id.a3);
b[4] = (Button) findViewById(R.id.a4);
b[5] = (Button) findViewById(R.id.a5);
b[6] = (Button) findViewById(R.id.a6);
b[7] = (Button) findViewById(R.id.a7);
b[8] = (Button) findViewById(R.id.a8);
b[9] = (Button) findViewById(R.id.a9);
b[0] = (Button) findViewById(R.id.a0);
b[10] = (Button) findViewById(R.id.a00);
back = (Button)findViewById(R.id.back);
apoint = (Button) findViewById(R.id.apoint);
equal = (Button) findViewById(R.id.equal);
toggleButton = (ToggleButton) findViewById(R.id.toggleButton);
spinner = (Spinner) findViewById(R.id.spinner);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
/*Add listener*/
for (Button i : b) {
i.setOnClickListener(new listen());
}
apoint.setOnClickListener(new listen());
equal.setOnClickListener(new listen());
back.setOnClickListener(new listen());
edit1 = (EditText) findViewById(R.id.editText);
edit2 = (EditText) findViewById(R.id.editText2);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
select = list.get(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!toggleButton.isChecked()) {
isOn = true;
} else {
isOn = false;
}
}
});
}
private void addNumber(int i) {
if (isOn) {
edit1.append(i + "");
} else {
edit2.append(i + "");
}
}
private void addPoint() {
Log.d("item", "addPoint");
if (isOn) {
if (!edit1.getText().toString().contains(".")) {
edit1.append(".");
}
} else {
if (!edit2.getText().toString().contains(".")) {
edit2.append(".");
}
}
}
private void addZero(boolean isDoubleZero) {
if (isOn) {
if (!edit1.getText().toString().equals("")) {
if (Double.parseDouble(edit1.getText().toString()) != 0.0) {
if (isDoubleZero) {
edit1.append("00");
} else {
edit1.append("0");
}
}
}
} else {
if (!edit2.getText().toString().equals("")) {
if (Double.parseDouble(edit2.getText().toString()) != 0.0) {
edit2.append("0");
if (isDoubleZero) {
edit2.append("00");
} else {
edit2.append("0");
}
}
}
}
}
private void back(){
if (isOn) {
String s = edit1.getText().toString();
if(!s.equals("")){
edit1.setText(s.substring(0,s.length()-1));
}
} else {
String s = edit2.getText().toString();
if (!s.equals("")){
edit2.setText(s.substring(0,s.length()-1));
}
}
}
class listen implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.a1:
addNumber(1);
Log.i("item", "1");
break;
case a2:
addNumber(2);
break;
case R.id.a3:
addNumber(3);
break;
case R.id.a4:
addNumber(4);
break;
case R.id.a5:
addNumber(5);
break;
case R.id.a6:
addNumber(6);
break;
case R.id.a7:
addNumber(7);
break;
case R.id.a8:
addNumber(8);
break;
case R.id.a9:
addNumber(9);
break;
case R.id.a0:
addZero(false);
break;
case R.id.a00:
addZero(true);
break;
case R.id.apoint:
addPoint();
break;
case R.id.equal:
calculate();
break;
case R.id.back:
back();
break;
}
}
}
private void calculate() {
String s1 = edit1.getText().toString();
String s2 = edit2.getText().toString();
if ((!s1.equals("")) && (!s2.equals("")) && select != null) {
double a1 = Double.parseDouble(s1);
double a2 = Double.parseDouble(s2);
Toast.makeText(MainActivity.this,"计算成功",Toast.LENGTH_SHORT).show();
if (select.equals("+")) {
edit2.setText("");
edit1.setText(a1 + a2 + "");
} else if (select.equals("-")) {
edit2.setText("");
edit1.setText((a1 - a2) + "");
} else if (select.equals("*")) {
edit2.setText("");
edit1.setText((a1 * a2) + "");
} else if (select.equals("/")) {
if (a2 != 0) {
edit2.setText("");
edit1.setText((a1 / a2) + "");
}
} else if (select.equals("^")) {
edit2.setText("");
for (int i = 0; i < a2; i++) {
a1 = a1 * a1;
}
edit1.setText(a1 + "");
}
}
}
}
activity_main:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="activitytest.example.com.log_calculater.MainActivity">
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/editText"/>
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText2"
android:layout_alignParentStart="true"
android:id="@+id/toggleButton"
android:layout_alignParentEnd="true"
android:textOff="上一个"
android:textOn="下一个"/>
<GridLayout
android:id="@+id/gridLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="3"
android:rowCount="4"
android:layout_below="@+id/toggleButton"
android:layout_alignParentStart="true">
<Button android:text="7"
android:id="@+id/a7" />
<Button android:text="8"
android:id="@+id/a8" />
<Button android:text="9"
android:id="@+id/a9" />
<Button android:text="4"
android:id="@+id/a4" />
<Button android:text="5"
android:id="@+id/a5" />
<Button android:text="6"
android:id="@+id/a6" />
<Button android:text="1"
android:id="@+id/a1" />
<Button android:text="2"
android:id="@+id/a2" />
<Button android:text="3"
android:id="@+id/a3" />
<Button android:text="0"
android:id="@+id/a0" />
<Button android:text="."
android:id="@+id/apoint" />
<Button android:text="00"
android:id="@+id/a00" />
</GridLayout>
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="0"
android:textAlignment="center"
android:layout_below="@+id/spinner"
android:layout_alignParentStart="true" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_row="2"
android:hint="0"
android:textAlignment="center"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/equal"
android:text="="
android:textSize="30sp"
android:layout_below="@+id/gridLayout"
android:layout_alignParentStart="true"
android:layout_toStartOf="@+id/back" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/back"
android:text="Back"
android:layout_alignBottom="@+id/equal"
android:layout_alignParentEnd="true" />
</RelativeLayout>