Androidのプログラミング – 投稿 6: 建設実践電卓アプリ

みなさん、こんにちは, で 2 すべてのインターフェイスのデザインは、その後比較的多い私たちが集まってきた前に. 少しストレスを軽減してくつろぐために、この記事では、完全なアプリケーションの電卓を作るためにご案内します.

[qads]

私たちは前夜設計されたコード・インターフェースを使用します。.

電卓レイアウト-OK-2

ああ忘れ, あなたはすぐに計算することができ、このアプリで行うにはメッセージが表示され、および多くの努力を取ることはありません, 我々が使用されます ライブラリバラン 彼らが構築しています. あなた ここbalan.jarファイルのダウンロード. 形状などの次のプロジェクトモードを開き、フォルダbalan.jarアプリにファイルをコピー/ libsに

アンドロイド-追加-libsの

次に、選択したファイルを右クリックしbalan.jar ライブラリに追加… メニューの一番下の近く, あなたはすべてのアプリは大丈夫心配されるモジュールに追加したい場合はシステムが求められます. 待っ分同期システムを終了します.

今、あなたは、フォルダ内のファイルを開くActivityMain.java アプリ/ srcに/メイン/ javaの/{パッケージ名} アウト. 現在、顎 setContentView私たちのdrrdfの遺跡 R.layout.activity_main, あなたはそれを変更します R.layout.layout_calculator あなたは一日前に設計した電卓インターフェイスのファイルに接続するには.

package com.nguyenvanquan7826.tut5linearlayout;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

[OK]を, 今本当にオフライン開始.
最初の, コンピュータで動作することができるように、, 我々は、対応する変数を介してJavaコードとのインタフェースの要素を接続する必要があります.

package com.nguyenvanquan7826.tut5linearlayout;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView tvMath;
    private TextView tvResult;

    private int[] idButton = {
            R.id.btn0,
            R.id.btn1, R.id.btn2, R.id.btn3,
            R.id.btn4, R.id.btn5, R.id.btn6,
            R.id.btn7, R.id.btn8, R.id.btn9,
            R.id.btnDot, R.id.btnResult,
            R.id.btnPlus, R.id.btnSub, R.id.btnMul, R.id.btnDiv,
            R.id.btnC, R.id.btnOpen, R.id.btnClose
    };

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

        connectView();
    }

    private void connectView() {
        tvMath = (TextView) findViewById(R.id.tvMath);
        tvResult = (TextView) findViewById(R.id.tvResult);

        for (int i = 0; i < idButton.length; i++) {
            findViewById(idButton[i]).setOnClickListener(this);
        }
    }

    @Override
    public void onClick(View view) {
        
    }
}

あなたは、接続上のコードに気付き、結果しているTextViewには、通常の数学であります, ボタンは、個人が正常でない接続します. 私が実現した理由は、接続して、彼らは両方必要イベントを開始するので、多くのボタンがあります. そう考えは、同じ作業を繰り返し、データループに入ることができるようになります? そこで、彼らはアレイに自分のIDを持っています idButton. ビューごとに実質的なIDは、システム内の整数型に変換され、, タイプのように、この配列 int型. また、異なるにも接続して、ループ内の各ボタンのイベントを開始します. 私達はちょうど、コマンドのチェーンを介してすぐにイベントをキャプチャした接続ボタンをキャストしないでください findViewById(idButton[で]).setOnClickListener(この);
その理由は、関数ということです findViewById 私たちにビューをもたらします (それ以来、通常我々はボタンのように、その真のスタイルに押され, のTextView,…) Clickイベントをキャッチすることができますビュー機能あたり (TextViewに含みます, EditTextの,…) 我々は即時のために呼び出す必要があります setOnClickListener [ボタン上のキャストなし.

今、次のタスクは、ボタンのクリックイベントを処理しています. ここでは、やって分割しました 3 ボタンの種類: ボタン番号, ボタンボタンハンドル数学と数学.
ボタンの数やボタン操作、任意のボタンをクリックします, 私たちはただの表現に対応するテキストを追加します. ボタン長いハンドル (ボタンCのVAボタン= ) その後、計算を実行したり、画面をクリア. あなたがすることによってボタンをクリックすると、, 我々は、元に追加したライブラリーバランバラン内のオブジェクトのvalueMath呼び出します, それは私たちの結果を得るためにカウントされます.

package com.nguyenvanquan7826.tut5linearlayout;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import cachhoc.net.Balan;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView tvMath;
    private TextView tvResult;

    private int[] idButton = {
            R.id.btn0,
            R.id.btn1, R.id.btn2, R.id.btn3,
            R.id.btn4, R.id.btn5, R.id.btn6,
            R.id.btn7, R.id.btn8, R.id.btn9,
            R.id.btnDot,
            R.id.btnPlus, R.id.btnSub, R.id.btnMul, R.id.btnDiv,
            R.id.btnOpen, R.id.btnClose,
            R.id.btnC, R.id.btnResult
    };

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

        connectView();
    }

    private void connectView() {
        tvMath = (TextView) findViewById(R.id.tvMath);
        tvResult = (TextView) findViewById(R.id.tvResult);

        for (int i = 0; i < idButton.length; i++) {
            findViewById(idButton[i]).setOnClickListener(this);
        }
        init();
    }

    private void init() {
        tvMath.setText("|");
        tvResult.setText("0");
    }

    @Override
    public void onClick(View view) {
        int id = view.getId();

        // check button number and button operator
        for (int i = 0; i < idButton.length - 2; i++) {
            if (id == idButton[i]) {
                String text = ((Button) findViewById(id)).getText().toString();

                // clear char | on top
                if (tvMath.getText().toString().trim().equals("|")) {
                    tvMath.setText("");
                }

                tvMath.append(text);
                return;
            }
        }

        // clear screen
        if (id == R.id.btnC) {
            init();
            return;
        }

        // calculation
        if (id == R.id.btnResult) {
            cal();
        }
    }

    private void cal() {
        String math = tvMath.getText().toString().trim();
        if (math.length() > 0) {
            Balan balan = new Balan();
            String result = balan.valueMath(math) + "";
            String error = balan.getError();

            // check error
            if (error != null) {
                tvResult.setText(error);
            } else { // show result
                tvResult.setText(result);
            }
        }
    }
}

それでおしまい, ここでの我々の結果は、オフライン.
電卓結果