一 、布局
用了GridLayout布局,activity_main_xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout 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:rowCount="6"
android:columnCount="4"
tools:context=".MainActivity">
<EditText
android:id="@+id/textView1"
android:layout_width="349dp"
android:layout_height="wrap_content"
android:layout_columnSpan="4"
android:layout_marginLeft="4px"
android:gravity="right"
android:hint="0"
android:textColor="#000000"
android:textSize="50dip" />
<Button
android:id="@+id/main_btndel"
android:layout_width="351dp"
android:layout_height="wrap_content"
android:layout_columnSpan="4"
android:text="清除"
android:textSize="26sp" />
<Button
android:id="@+id/main_btn1"
android:text="1"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btn2"
android:text="2"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btn3"
android:text="3"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btnjj"
android:text="+"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btn4"
android:text="4"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btn5"
android:text="5"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btn6"
android:text="6"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btnj"
android:text="-"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btn7"
android:text="7"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btn8"
android:text="8"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btn9"
android:text="9"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btnx"
android:text="×"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btnd"
android:text="."
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btn0"
android:text="0"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btnc"
android:text="÷"
android:textSize="26sp"
android:gravity="center"
/>
<Button
android:id="@+id/main_btn1d"
android:text="="
android:textSize="26sp"
android:gravity="center"
/>
</GridLayout>
效果图:
说明:按照书上的例子,我先设置一个大的GridLayout布局,然后再镶嵌两个GridLayout布局,分别是按钮和输入框 。
二、功能实现
package com.example.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
EditText textView1 ;
Button main_btn1;
Button main_btn2;
Button main_btn3;
Button main_btn4;
Button main_btn5;
Button main_btn6;
Button main_btn7;
Button main_btn8;
Button main_btn9;
Button main_btn0;
Button main_btnjj;
Button main_btnj;
Button main_btnx;
Button main_btnc;
Button main_btnd;
Button main_btn1d;
Button main_btndel;
boolean clear_flag;//清空标识
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
main_btn1 = findViewById(R.id.main_btn1);
main_btn2 = findViewById(R.id.main_btn2);
main_btn3 = findViewById(R.id.main_btn3);
main_btn4 = findViewById(R.id.main_btn4);
main_btn5 = findViewById(R.id.main_btn5);
main_btn6 = findViewById(R.id.main_btn6);
main_btn7 = findViewById(R.id.main_btn7);
main_btn8 = findViewById(R.id.main_btn8);
main_btn9 = findViewById(R.id.main_btn9);
main_btn0 = findViewById(R.id.main_btn0);
main_btnjj = findViewById(R.id.main_btnjj);// +
main_btnj = findViewById(R.id.main_btnj);// -
main_btnx = findViewById(R.id.main_btnx);// *
main_btnc = findViewById(R.id.main_btnc); // /
main_btnd = findViewById(R.id.main_btnd);//小数点
main_btn1d = findViewById(R.id.main_btn1d);//=
main_btndel = findViewById(R.id.main_btndel);//清空
textView1= (EditText) findViewById(R.id.textView1);//结果集
}
/**
*设置点击事件
*/
private void initClickEvent() {
main_btn0.setOnClickListener(this);
main_btn1.setOnClickListener(this);
main_btn2.setOnClickListener(this);
main_btn3.setOnClickListener(this);
main_btn4.setOnClickListener(this);
main_btn5.setOnClickListener(this);
main_btn6.setOnClickListener(this);
main_btn7.setOnClickListener(this);
main_btn8.setOnClickListener(this);
main_btn9.setOnClickListener(this);
main_btnd.setOnClickListener(this);
main_btndel.setOnClickListener(this);
main_btnjj.setOnClickListener(this);
main_btnj.setOnClickListener(this);
main_btnx.setOnClickListener(this);
main_btnc.setOnClickListener(this);
main_btn1d.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//用switch来判断
//拿id
String input = textView1.getText().toString();
switch (v.getId()){
case R.id.main_btn0:
case R.id.main_btn1:
case R.id.main_btn2:
case R.id.main_btn3:
case R.id.main_btn4:
case R.id.main_btn5:
case R.id.main_btn6:
case R.id.main_btn7:
case R.id.main_btn8:
case R.id.main_btn9:
case R.id.main_btnd:
if(clear_flag){
clear_flag = false;
textView1.setText("");//赋值为空
}
textView1.setText(input + ((Button)v).getText());//结果集就为本身
break;
case R.id.main_btnjj:
case R.id.main_btnj:
case R.id.main_btnx:
case R.id.main_btnc:
if(clear_flag){
clear_flag = false;
input = "";
textView1.setText("");
}
textView1.setText(input + " " + ((Button)v).getText() + " ");
break;
case R.id.main_btndel:
if(clear_flag){
clear_flag = false;
input = "";
textView1.setText("");
}else if(input != null || !input.equals("")) {//如果获取到的内容为空
textView1.setText(input.substring(0, input.length() - 1));//结果集为空
}
break;
case R.id.main_btn1d://运算结果 =
getResult();//调用处理结果集的方法
break;
}
}
private void getResult() {
String exp = textView1.getText().toString();//获取文本框的内容
if (exp == null || exp.equals("")) {
return;
}
if (!exp.contains(" ")) {
return;
}
if (clear_flag) {
clear_flag = false;
return;
}
clear_flag = true;
double result = 0;
//进行截取
//运算符前的数字
String s1 = exp.substring(0, exp.indexOf(" "));
//运算符
String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);
//运算符后的数字
String s2 = exp.substring(exp.indexOf(" ") + 3);
if (!s1.equals("") && !s2.equals("")) {//如果包含小数点的运算
double d1 = Double.parseDouble(s1);//则数字都是double类型
double d2 = Double.parseDouble(s2);
if (op.equals("+")) {//如果是 +
result = d1 + d2;
} else if (op.equals("-")) {
result = d1 - d2;
} else if (op.equals("*")) {
result = d1 * d2;
} else if (op.equals("/")) {
//否则执行正常是除法运算
if (d2 == 0) { //如果被除数是0
result = 0; //则结果是0
} else result = d1 / d2;
}
if (!s1.contains(".") && !s2.contains(".") && !op.equals("/")) {//如果是整数类型
int r = (int) result; //都是整形
textView1.setText(r + "");
} else {
textView1.setText(result + "");
}
} else if (!s1.equals("") && s2.equals("")) {//如果是只输入运算符前的数
textView1.setText(exp);//直接返回当前文本框的内容
} else if (s1.equals("") && !s2.equals("")) {//如果是只输入运算符后面的数
double d2 = Double.parseDouble(s2);
//运算符前没有输入数字
if (op.equals("+")) {
result = 0 + d2;
} else if (op.equals("-")) {
result = 0 - d2;
} else if (op.equals("*")) {
result = 0;
} else if (op.equals("/")) {
result = 0;
}
if (!s1.contains(".") && !s2.contains(".")) {
int r = (int) result;
textView1.setText(r + "");
} else {
textView1.setText(result + "");
}
} else {
textView1.setText("");
}
}}
运行
第一次进行Android开发,算是不错了。