Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android基礎知識(簡單實例計算器)

Android基礎知識(簡單實例計算器)

編輯:關於Android編程

在做這個計算器的時候,我認為主要分為兩部分:界面設計,功能實現。


(效果圖)

 


 

界面設計:

其實界面設計和功能實現是相互聯系在一起的,我界面怎麼去設計,功能就要去怎麼實現。

1、控件:界面有19個按鈕,數字1-9和小數點、加減乘除、清空回退、百分比、等號,還有一個顯示內容的文本框。實現起來十分簡單只要拖動到xml中即可。

2、布局設計:剛拖進來的控件都擺放得比較凌亂,需要對其調整,本案例中,我會使用LinearLayout對界面進行布局。

3、樣式:有背景顏色、邊框線顏色、圓角。

接下來先看樣式文件:

 

簡單說明一下:

gradient-- 對應顏色漸變。 startcolor、endcolor就不多說了。android:angle 是指從哪個角度開始變。solid -- 填充。stroke -- 描邊。corners -- 圓角。padding -- 定義內容離邊界的距離。 與android:padding_left、android:padding_right這些是一個道理。

先介紹white_bg.xml,也就是顯示內容的文本框的樣式文件:

 



    
    
    
    
    
    

 

 

接下來介紹白色鍵的樣式文件white_selector.xml

 


  
  


第一個item是調用上一個樣式white_bg.xm為默認情況下的樣式第二個item是調用了gray_bg.xml樣式文件,根據其android:state_pressed="true"屬性,意為點擊時的樣式。


   

接下來介紹白色鍵的樣式文件orange_selector.xml


   

第一個item是調用了ashen.xml樣式文件,根據其android:state_pressed="true"屬性,意為點擊時的樣式。


    

第二個item是調用樣式orange_bg.xm為默認情況下的樣式:

 


   

 


在activity_main.xml的空間中分別去調用white_bgwhite_selectororange_selector

 

 

功能實現:

在實現功能前,先要分清楚他們之間的關系:

1、數字0-9和小數點

2、加減乘除

3、清除與回刪鍵

4、等號

5、百分比

 

public class MainActivity extends Activity implements View.OnClickListener {
    Button btn_0, btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9; //數字0-9
    Button btn_dian; //小數點

    Button btn_C, btn_del;  //清除和回刪

    Button btn_yu; //求余
    Button btn_chu; //除法
    Button btn_cheng; //乘法
    Button btn_jia;  //加法
    Button btn_jian; //減法
    Button btn_deng;  //等於

    EditText input;//顯示內容文本框

    boolean clear_ed; //是否情況文本框

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_C = (Button) findViewById(R.id.btn_C);
        btn_del = (Button) findViewById(R.id.btn_del);
        btn_yu = (Button) findViewById(R.id.btn_yu);
        btn_chu = (Button) findViewById(R.id.btn_chu);
        btn_cheng = (Button) findViewById(R.id.btn_cheng);
        btn_jia = (Button) findViewById(R.id.btn_jia);
        btn_jian = (Button) findViewById(R.id.btn_jian);
        btn_deng = (Button) findViewById(R.id.btn_deng);
        btn_dian = (Button) findViewById(R.id.btn_dian);
        btn_9 = (Button) findViewById(R.id.btn_9);
        btn_8 = (Button) findViewById(R.id.btn_8);
        btn_7 = (Button) findViewById(R.id.btn_7);
        btn_6 = (Button) findViewById(R.id.btn_6);
        btn_5 = (Button) findViewById(R.id.btn_5);
        btn_4 = (Button) findViewById(R.id.btn_4);
        btn_3 = (Button) findViewById(R.id.btn_3);
        btn_2 = (Button) findViewById(R.id.btn_2);
        btn_1 = (Button) findViewById(R.id.btn_1);
        btn_0 = (Button) findViewById(R.id.btn_0);
        input = (EditText) findViewById(R.id.input);

        btn_0.setOnClickListener(this);
        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_7.setOnClickListener(this);
        btn_8.setOnClickListener(this);
        btn_9.setOnClickListener(this);

        btn_yu.setOnClickListener(this);
        btn_chu.setOnClickListener(this);
        btn_cheng.setOnClickListener(this);
        btn_jia.setOnClickListener(this);
        btn_jian.setOnClickListener(this);
        btn_deng.setOnClickListener(this);
        btn_dian.setOnClickListener(this);

        btn_C.setOnClickListener(this);
        btn_del.setOnClickListener(this);

    }


    @Override
    public void onClick(View v) {
        String str = input.getText().toString();
        if (str.equals("0")) {
            str = "";
        }

        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:
            case R.id.btn_dian:

                if (clear_ed) {
                    clear_ed = false;
                    str = "";
                    input.setText("0");  //重置為0
                }
                input.setText(str + ((Button) v).getText());  //根據按鈕的setText來添加數字
                break;
            case R.id.btn_jia:
            case R.id.btn_jian:
            case R.id.btn_cheng:
            case R.id.btn_chu:
                input.setText(str + " " + ((Button) v).getText() + " ");  //為區分加減乘除和數字 特意留了空格為間隔,
                break;

            case R.id.btn_C:
                input.setText("0");  //重置為0
                break;

            case R.id.btn_del:

                if (input.length() <= 1 || input.getText().toString().equals("")) {
                    input.setText("0");
                } else {
                    input.setText(str.substring(0, str.length() - 1));  // 刪除末尾一個數  由0開始 到str長度減1.
                }
                break;


            case R.id.btn_deng:
                getResult();
                break;

            case R.id.btn_yu:
                Double d3 = Double.parseDouble(str);
                Double d4 = d3 * 0.01;
                input.setText(d4 + "");
                break;
        }

    }

    private void getResult() {
        String exp = input.getText().toString();
        if (exp == null || exp.equals("")) {  //如果exp為空的話結束
            return;
        }
        if (!exp.contains(" ")) {//如果exp沒有為預算法預留的“空格”的話結束
            return;
        }

        clear_ed = true;

        double result = 0;
        String s1 = exp.substring(0, exp.indexOf(" ")); //定義s1的內容是 運算符前的那串數字
        String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);//運算符
        String s2 = exp.substring(exp.indexOf(" ") + 3); //定義s2的內容是 運算符前的那串數字

        System.out.println(s1);
        System.out.println(op);
        System.out.println(s2);

        if (!s1.equals("") && !s2.equals("")) {    //分四種情況來寫,s1 s2都不為null。s1 為null,s2不為。s1不為,s2為空。s12都為空的
            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,那麼結果為0
                    result = 0;
                } else {
                    result = d1 / d2;
                }
            }
            //將算好了的結果,再根據是否包含小數點來 決定輸出的結果類型:整型還是雙精度型
            if (!s1.contains(".") && !s2.contains(".")) {  //如果s1、s2都不包含小數點,那麼他們是整型
                int r = (int) result; //轉化為int型
                input.setText(r + "");
            } else {
                input.setText(result + "");
            }
        } else if (!s1.equals("") && s2.equals("")) { //如果s1不為空,s2為空
            input.setText(exp); //結果不作處理,原樣輸出
        } else if (s1.equals("") && s2.equals("")) { //都為空
            input.setText(exp); //結果不作處理,原樣輸出
        } else if (s1.equals("") && !s2.equals("")) { //如果s1為空,s2不為空

            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 (!s2.contains(".")) {  //如果s1、s2都不包含小數點,那麼他們是整型
                int r = (int) result; //轉化為int型
                input.setText(r + "");
            } else {
                input.setText(result + "");
            }
        }
    }
}

 

後期再添加些注釋,先偷會懶。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved