Hướng dẫn làm ứng dụng android máy tính bỏ túi với Anroid Studio (Phần 2)

Phần 2: Lập trình chức năng

Ở bài viết trước mình đã hướng dẫn các bạn thiết kế được giao diện của một chiếc máy tính tay đơn giản, các bạn có thể tham khảo bài viết trước Tại đây.

Thì ở bài viết này mình sẽ hướng dẫn các bạn lập trình các chức năng để chiếc máy tính của mình có thể hoạt động được.

Mình sẽ chuyển đến file java Calculator_Activity như hình để viết các chức năng cho activity này.

Mỗi một layout như vậy sẽ được quản lí bởi một activity, thì để có thể dùng file java này quản lí cái layout mình đã tạo ra thì trong hàm onCreate, mình sẽ sử dụng một hàm setContentView() để có thể kết nối đến layout calculator của mình,

Tiếp theo thì mình sẽ gọi tất cả các đối tượng có trong layout của mình ra để mình có thể điều khiển chúng. Trong layout của mình thì có các button và textView nên mình sẽ khai báo các đối tượng này và sử dụng hàm findViewById() để có thể gọi được đến đúng đối tượng qua id đã đặt cho chúng.

Sau khi đã truy cập được đến các đối tượng có trong layout, bây giờ chúng ta sẽ viết các sự kiện cho các thay đổi trên layout.

Như đã biết, khi ấn vào một button số từ 0-9 thì các số này sẽ được lần lượt hiển thị lên màn hình textView, thì để bắt được sự kiện người dùng ấn vào một nút thì chúng ta sẽ sử dụng hàm setOnClickListener() để lắng nghe sự thay đổi của đối tượng. Các hàm này sẽ được viết trong hàm onCreate(), và chúng ta viết tương tự cho các button từ 0 đến 9

Sau khi đã viết các sự kiện cho các button số, thì bây giờ chúg ta tiếp tục viết các sự kiện cho các button toán tử. Với thuật toán, khi ấn vào một button toán tử thì giá trị trên màn hình đang có sẽ được lưu vào một biến dữ liệu, và xóa màn hình đi để người dùng nhập các số để tính toán với toán tử được chọn, và các button toán tử lúc này sẽ bị hủy enable.

Mình sẽ viết hàm để lấy giá trị hiện có trên màn hình để gán vào một biến.

Để có thể hủy enable các button, mình sẽ viết một hàm buttonFalse(), enable các button toán tử và xóa màn hình textView

Tiếp theo là một hàm thay đổi màu button khi ấn vào một button toán tử để biết được toán tử nào đang được sử dụng để tính toán. Các bạn có thể thay đổi màu sắc tùy ý mình ở R.color.<Màu các bạn lựa chọn>

Bây giờ chúng ta sẽ viết sự kiện cho các button toán tử .

Khi đã có được số để tính toán và có được toán tử, chúng ta sẽ tính kết quả trong sự kiện người dùng ấn vào button “=”.

Và cuối cùng là button C, dùng để đặt tất cả trạng thái về ban đầu, xóa toàn bộ dữ liệu trên màn hình và enable các button lại.

Như vậy là mình đã hướng dẫn các bạn lập trình các chức năng của một máy tính tay đơn giản, các bạn có thể tham khảo bài code dưới đây.

package com.example.calculator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Calculator_Activity extends AppCompatActivity {
    Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn0, btnCong, btnTru, btnNhan, btnChia, btnBang, btnC;
    TextView txtResult;
    Double var1, var2, ans;
    Boolean cong = false, tru = false, nhan = false, chia = false;

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

        btn0 = findViewById(R.id.btn0);
        btn1 = findViewById(R.id.btn1);
        btn2 = findViewById(R.id.btn2);
        btn3 = findViewById(R.id.btn3);
        btn4 = findViewById(R.id.btn4);
        btn5 = findViewById(R.id.btn5);
        btn6 = findViewById(R.id.btn6);
        btn7 = findViewById(R.id.btn7);
        btn8 = findViewById(R.id.btn8);
        btn9 = findViewById(R.id.btn9);
        btnCong = findViewById(R.id.btnCong);
        btnTru = findViewById(R.id.btnTru);
        btnNhan = findViewById(R.id.btnNhan);
        btnChia = findViewById(R.id.btnChia);
        btnC = findViewById(R.id.btnC);
        btnBang = findViewById(R.id.btnBang);
        txtResult = findViewById(R.id.txtResult);

        //to show value of this button in textView
        btn0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //khi ấn vào một button thì lấy giá trị có trên textView và + thêm giá trị trong ""
                txtResult.setText(txtResult.getText() + "0");
            }
        });

        //to show value of this button in textView
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txtResult.setText(txtResult.getText() + "1");
            }
        });

        //to show value of this button in textView
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txtResult.setText(txtResult.getText() + "2");
            }
        });

        //to show value of this button in textView
        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txtResult.setText(txtResult.getText() + "3");
            }
        });

        //to show value of this button in textView
        btn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txtResult.setText(txtResult.getText() + "4");
            }
        });

        //to show value of this button in textView
        btn5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txtResult.setText(txtResult.getText() + "5");
            }
        });

        //to show value of this button in textView
        btn6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txtResult.setText(txtResult.getText() + "6");
            }
        });

        //to show value of this button in textView
        btn7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txtResult.setText(txtResult.getText() + "7");
            }
        });

        //to show value of this button in textView
        btn8.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txtResult.setText(txtResult.getText() + "8");
            }
        });

        //to show value of this button in textView
        btn9.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txtResult.setText(txtResult.getText() + "9");
            }
        });

        //btnCong
        btnCong.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setVar1(); //gọi hàm lấy giá trị trên textView gán vào một biến
                colorChange(btnCong); //thay đổi màu button cộng
                buttonFalse(); // enable các button toán tử đi
                cong = true; //đưa trạng thái button cộng về true là đang được chọn
                tru = false; //và ngược lại các button khác về false
                nhan = false;
                chia = false;
            }
        });

        //btnTru
        btnTru.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setVar1();
                colorChange(btnTru);
                buttonFalse();
                cong = false;
                tru = true;
                nhan = false;
                chia = false;
            }
        });

        //btnNhan
        btnNhan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setVar1();
                colorChange(btnNhan);
                buttonFalse();
                cong = false;
                tru = false;
                nhan = true;
                chia = false;
            }
        });

        //btnChia
        btnChia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setVar1();
                colorChange(btnChia);
                buttonFalse();
                cong = false;
                tru = false;
                nhan = false;
                chia = true;
            }
        });

        btnC.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //đặt màu lại cho các button về màu ban đầu
                btnCong.setBackgroundColor(getResources().getColor(R.color.btnKeyBoard));
                btnTru.setBackgroundColor(getResources().getColor(R.color.btnKeyBoard));
                btnNhan.setBackgroundColor(getResources().getColor(R.color.btnKeyBoard));
                btnChia.setBackgroundColor(getResources().getColor(R.color.btnKeyBoard));
                //enable các button toán tử
                btnBang.setEnabled(true);
                btnCong.setEnabled(true);
                btnTru.setEnabled(true);
                btnNhan.setEnabled(true);
                btnChia.setEnabled(true);
                //xóa màn hinh
                txtResult.setText("");
            }
        });

        //btnBang
        btnBang.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //lấy giá trị trên màn hình textView gán vào var2 (giá trị được nhập sau toán tử)
                var2 = Double.parseDouble(txtResult.getText().toString());
                //kiểm tra nếu trạng thái toán tử nào được kích hoạt thì thực hiện phép tính tương ứng
                if(cong){
                    ans = var1 + var2;
                } else if (tru){
                    ans = var1 - var2;
                } else if (nhan){
                    ans = var1 * var2;
                } else if (chia){
                    ans = var1 / var2;
                } else {
                    ans = ans + 0;
                }
                //gán kết quả tinh được lên màn hình textView
                txtResult.setText(ans.toString());
                btnBang.setEnabled(false);

            }
        });
    }


    //To set var1 value by value in textView
    public void setVar1(){
        var1 = Double.parseDouble(txtResult.getText().toString()); // chuyển sang kiểu dữ liệu là double để tính toán
    }

    //To disable buttons
    public void buttonFalse() {
        btnCong.setEnabled(false);
        btnTru.setEnabled(false);
        btnNhan.setEnabled(false);
        btnChia.setEnabled(false);
        txtResult.setText("");
    }


        //to change button color
    public void colorChange(Button b) {
        b.setBackgroundColor(getResources().getColor(R.color.startColor_ActionBar));
    }

}

Trong quá trình thực hiện nếu bạn nào không hiểu, hoặc xảy ra lỗi, hoặc thắc mắc gì, mọi người có thể để lại comment bên dưới, mình sẽ giải đáp sớm nhất có thể trong khả năng của mình :>>

Cảm ơn các bạn đã đọc bài viết này, mọi đóng góp hay thắc mắc mọi người vui lòng để lại comment bên dưới, mình sẽ phản hồi sớm nhất có thể. Chúc các bạn thành công.

Minh Nguyễn
PLT SOLUTIONS

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *