无聊写了个硬核计算器练练手
思路:
在这里我是使用了四个TextView,其中第一个TextView是用来显示我们进行计算的第一个数,第二个TextView是用来显示计算符号,第三个是进行计算的第二个数,第四个是来显示计算的等号,而最后一个是用来显示计算答案的
首先布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="fill_parent"
android:background="#ffff8080"
android:orientation="horizontal"
android:layout_height="wrap_content">
<TextView
android:textSize="50sp"
android:id="@+id/et_input"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_marginRight="20dp" />
<TextView
android:textSize="50sp"
android:id="@+id/et_option"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_marginRight="20dp" />
<TextView
android:textSize="50sp"
android:id="@+id/et_input2"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_marginRight="20dp" />
<TextView
android:textSize="50sp"
android:id="@+id/et_eq"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:layout_marginRight="20dp" />
</LinearLayout>
<LinearLayout
android:gravity="center_horizontal"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp">
<Button
android:textSize="30sp"
android:id="@+id/btn_clr"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:text="C" />
<Button
android:textSize="30sp"
android:id="@+id/btn_del"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="D"/>
<Button
android:textSize="30sp"
android:id="@+id/btn_div"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="÷" />
<Button
android:textSize="30sp"
android:id="@+id/btn_mul"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="×" />
</LinearLayout>
<LinearLayout
android:gravity="center_horizontal"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<Button
android:textSize="30sp"
android:id="@+id/btn_7"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:text="7" />
<Button
android:textSize="30sp"
android:id="@+id/btn_8"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="8" />
<Button
android:textSize="30sp"
android:id="@+id/btn_9"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="9" />
<Button
android:textSize="30sp"
android:id="@+id/btn_sub"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="-" />
</LinearLayout>
<LinearLayout
android:gravity="center_horizontal"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<Button
android:textSize="30sp"
android:id="@+id/btn_4"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:text="4" />
<Button
android:textSize="30sp"
android:id="@+id/btn_5"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="5" />
<Button
android:textSize="30sp"
android:id="@+id/btn_6"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="6" />
<Button
android:textSize="30sp"
android:id="@+id/btn_add"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="+" />
</LinearLayout>
<LinearLayout
android:gravity="center_horizontal"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:textSize="30sp"
android:id="@+id/btn_1"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:text="1" />
<Button
android:textSize="30sp"
android:id="@+id/btn_2"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="2" />
<Button
android:textSize="30sp"
android:id="@+id/btn_3"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="3" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<Button
android:textSize="30sp"
android:id="@+id/btn_0"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="170dp"
android:layout_height="80dp"
android:text="0" />
<Button
android:textSize="30sp"
android:id="@+id/btn_pt"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="." />
</LinearLayout>
</LinearLayout>
<Button
android:textSize="30sp"
android:id="@+id/btn_eq"
android:paddingRight="15sp"
android:paddingBottom="15sp"
android:layout_width="80dp"
android:layout_height="170dp"
android:layout_marginLeft="10dp"
android:text="=" />
</LinearLayout>
</LinearLayout>
主代码
因为计算器的功能比较少,所以这里就只有一个活动。我们在活动中的第一步就是为每一个按钮注册监听,这里我们让主活动继承自View.OnClickListener会更加的方便:
获取id并添加监听
findViewById(R.id.btn_0).setOnClickListener(this);
findViewById(R.id.btn_1).setOnClickListener(this);
findViewById(R.id.btn_2).setOnClickListener(this);
findViewById(R.id.btn_3).setOnClickListener(this);
findViewById(R.id.btn_4).setOnClickListener(this);
findViewById(R.id.btn_5).setOnClickListener(this);
findViewById(R.id.btn_6).setOnClickListener(this);
findViewById(R.id.btn_7).setOnClickListener(this);
findViewById(R.id.btn_8).setOnClickListener(this);
findViewById(R.id.btn_9).setOnClickListener(this);
findViewById(R.id.btn_add).setOnClickListener(this);
findViewById(R.id.btn_clr).setOnClickListener(this);
findViewById(R.id.btn_eq).setOnClickListener(this);
findViewById(R.id.btn_del).setOnClickListener(this);
et_input=(TextView)findViewById(R.id.et_input);
et_input2=(TextView)findViewById(R.id.et_input2);
et_option=(TextView)findViewById(R.id.et_option);
et_eq=(TextView)findViewById(R.id.et_eq);
第二步就是为每一个按钮添加具体的操作了,首先我先来讲解我的数字按钮。我具体的实现思路是在开始创建三个String对象分别来存储第一个运算数(str1)、运算符(option)和第二个运算数(str2)。当我们点击数字按钮时先判断运算符是否为空,如果为空则说明此时我们要输入的是第一个运算数,否则说明我们要输入的是第二个运算数。在输入时我让运算数=之前的数+按钮输入的数(注意这里我们定义的运算数为String类型),然后再把运算数显示在其想要的TextView当中。所以具体的代码是:
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn_0:
case R.id.btn_1:
case R.id.btn_2:
case R.id.btn_3:
case R.id.btn_4:
case R.id.btn_5:
case R.id.btn_6:
case R.id.btn_7:
case R.id.btn_8:
case R.id.btn_9:
if(et_option.getText().toString()=="") {//判断输入是否是输入的第一个数
if(et_eq.getText()=="") {
Str1 = Str1 + ((Button) v).getText().toString();
et_input.setText(Str1 + "");
System.out.println(Str1);
}else {
Clean();
}
}else {
if (et_eq.getText() == "") {
Str2 = Str2 + ((Button) v).getText().toString();
et_input2.setText(Str2);
System.out.println("正在输入第二个数:" + Str2);
}else {
Clean();
}
}
break;
case R.id.btn_add:
if(Option=="") {
Option = "+";
et_option.setText("+");
System.out.println("输入运算符+````````" + Str1);
}
break;
case R.id.btn_clr://清空
Clean();
break;
case R.id.btn_eq:
number=Double.parseDouble(Str1);
number2=Double.parseDouble(Str2);
et_eq.setText("= "+(int)(number+number2)+"");
System.out.println("结果为:"+(int)(number+number2));
break;
case R.id.btn_del:
if(Option==""){
if(Str1.length()!=0 && et_eq.getText()=="") {
Str1 = Str1.substring(0, Str1.length() - 1);
et_input.setText(Str1);
}
}else{
if(Str2.length()!=0 && et_eq.getText()=="") {
Str2 = Str2.substring(0, Str2.length() - 1);
et_input2.setText(Str2);
}
}
break;
}
}
public void Clean(){
Str1="";
Str2="";
et_eq.setText("");
Option="";
et_input2.setText("");
et_option.setText("");
et_input.setText("");
}