1. 程式人生 > >Android Studio製作簡單計算器

Android Studio製作簡單計算器

學習了表格佈局GridLayout,趁熱打鐵,利用GridLayout製作了一個計算器介面,以及實現了簡單的計算功能。直接上效果圖。

activity_main.xml佈局檔案

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:gravity="center"
    android:orientation="vertical"
    android:background="@mipmap/beijingtu"
    tools:context="com.example.a13468.gridlayout.MainActivity">

    <EditText
        android:id="@+id/ediText"
        android:layout_width="300dp"
        android:layout_height="70dp"
        android:layout_marginBottom="10dp"
        android:background="@drawable/custom_boder"
        android:editable="false"
        android:gravity="right|center_vertical"
        android:paddingRight="20dp"
        android:hint="請輸入數字"
        android:textSize="30sp"
        />


    <GridLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:columnCount="5"
        android:rowCount="6">


        <Button
            android:id="@+id/button1"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="MC"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button2"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="MR"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button3"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="MS"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button4"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="M+"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button5"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="M-"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button6"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="←"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button7"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="CE"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button8"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="C"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button9"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="±"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button10"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="√"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button11"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="9"
            android:background="#c5d381"
            android:layout_margin="2dp"


            />

        <Button
            android:id="@+id/button12"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="8"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button13"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="7"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button14"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="/"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button15"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="%"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button16"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="4"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button17"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="5"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button18"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="6"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button19"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="*"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button20"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="1/X"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button21"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="1"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button22"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="2"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button23"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="3"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button24"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="-"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button25"
            android:layout_width="60dp"
            android:layout_height="100dp"
            android:layout_rowSpan="2"
            android:text="="
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button26"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_columnSpan="2"
            android:text="0"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />

        <Button
            android:id="@+id/button27"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="."
            android:background="#c5d381"
            android:layout_margin="2dp"
            />
        <Button
            android:id="@+id/button28"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="+"
            android:background="#c5d381"
            android:layout_margin="2dp"
            />


    </GridLayout>

</LinearLayout>

MainActivity.java檔案

package com.example.a13468.gridlayout;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;



public class MainActivity extends Activity implements View.OnClickListener{
    //數字0-9
    private Button n_0;
    private Button n_1;
    private Button n_2;
    private Button n_3;
    private Button n_4;
    private Button n_5;
    private Button n_6;
    private Button n_7;
    private Button n_8;
    private Button n_9;

    //運算子
    private Button y_j;//+
    private Button y_jj;//-
    private Button y_c;//*
    private Button y_cc;//除
    private Button y_d;//=
    private Button y_x;//小數點

    //清除
    private  Button det;

     boolean clean;//清空標識


    //結果顯示集
    private EditText editText;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //數字0——9例項化
        n_0=findViewById(R.id.button26);
        n_1=findViewById(R.id.button21);
        n_2=findViewById(R.id.button22);
        n_3=findViewById(R.id.button23);
        n_4=findViewById(R.id.button16);
        n_5=findViewById(R.id.button17);
        n_6=findViewById(R.id.button18);
        n_7=findViewById(R.id.button13);
        n_8=findViewById(R.id.button12);
        n_9=findViewById(R.id.button11);

        //運算子例項化
        y_j=findViewById(R.id.button28);//加
        y_jj=findViewById(R.id.button24);//減
        y_c=findViewById(R.id.button19);//乘
        y_cc=findViewById(R.id.button14);//除
        y_d=findViewById(R.id.button25);//等
        y_x=findViewById(R.id.button27);//小數點
        det=findViewById(R.id.button8);//清除

        //結果顯示集
        editText=findViewById(R.id.ediText);

        //新增時間點選時間
        n_0.setOnClickListener( this);
        n_1.setOnClickListener(this);
        n_2.setOnClickListener( this);
        n_3.setOnClickListener( this);
        n_4.setOnClickListener(this);
        n_5.setOnClickListener( this);
        n_6.setOnClickListener( this);
        n_7.setOnClickListener(this);
        n_8.setOnClickListener( this);
        n_9.setOnClickListener( this);

        y_j.setOnClickListener( this);
        y_jj.setOnClickListener( this);
        y_c.setOnClickListener( this);
        y_cc.setOnClickListener( this);
        y_x.setOnClickListener( this);
        y_d.setOnClickListener( this);
        det.setOnClickListener( this);

    }
    //讀取每個按鈕內容
    public void onClick(View view){
        //獲取文字內容
        String  input=editText.getText().toString();
       switch (view.getId()){
           case R.id.button26:
           case R.id.button21:
           case R.id.button22:
           case R.id.button23:
           case R.id.button16:
           case R.id.button17:
           case R.id.button18:
           case R.id.button13:
           case R.id.button12:
           case R.id.button11:
           case R.id.button27://小數點
               if(clean){
                    clean=false;
                   editText.setText("");//賦值為空
               }
               editText.setText(input+((Button)view).getText()+"");//結果集就是本身
               break;
           case R.id.button28:
           case R.id.button24:
           case R.id.button19:
           case R.id.button14://除
               if(clean){
                   clean=false;
                   input="";
                   editText.setText("");
               }
               editText.setText(input+" "+((Button)view).getText()+" ");
                break;
           case R.id.button8://清除
               if(clean){
                   clean=false;
                   input="";
                   editText.setText("");
               }else  if(input!=null || !input.equals("")){
                   //如果獲取內容為空
                   editText.setText(input.substring(0,input.length() - 1 ));//結果集為空
                   break;
               }
                break;
           case  R.id.button25://運算結果=
               getResult();//呼叫處理結果方法
               break;
       }
    }
    //運算結果方法
    private void getResult(){
        String exp=editText.getText().toString();//獲取文字框內容
        if(exp==null||exp.equals("")){
            return;
        }
        if(!exp.contains("")){
            return;
        }
        if(clean){
            clean=false;
            return;
        }
        clean=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;//都是整形
                editText.setText(r+"");
            }else {
                editText.setText(result+"");
            }
        }else  if(!s1.equals("")&& s2.equals("")){
            //如果只輸入運算子前的數字
            editText.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;
                editText.setText(r+"");
            }else {
                editText.setText(result+"");
            }
        }else {
            editText.setText("");
        }
    }
}