如何在不使用android studio中的任何计算按钮的情况下计算两个数字

时间:2016-03-29 06:14:36

标签: android

我编写了一个程序来计算第一个和第二个文本框的值,并在点击“添加”按钮后在第三个文本框中显示结果。但是,一旦我开始在第一个或第二个文本框中自动输入,我想将结果显示在第三个文本框中,而不使用任何按钮。我知道这是可能的,因为有许多计算器应用程序可以完成预期的工作。我的代码如下。只想删除“添加”按钮并自动进行计算。请帮帮我......

“activity_main.xml”代码

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.saptarshi.test.MainActivity">



    <LinearLayout
       android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/t1"
        android:layout_weight="1"
        android:hint="1st number" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/t2"
        android:layout_weight="1"
        android:hint="2nd number" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/t3"
        android:layout_weight="1"
        android:hint="Total" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Add"
        android:id="@+id/button"
        android:layout_weight="1"
        android:onClick="add" />

</LinearLayout>

</LinearLayout>

“MainActivity.Java”代码

public void add(View view){
        EditText a = (EditText) findViewById(R.id.t1);
        EditText b = (EditText) findViewById(R.id.t2);
        EditText c = (EditText) findViewById(R.id.t3);
        int x = Integer.parseInt(a.getText().toString());
        int y = Integer.parseInt(b.getText().toString());
        int z = x+y;
        c.setText(Integer.toString(z));
    }

4 个答案:

答案 0 :(得分:1)

您可以将TextWatcher用于EditText,请参阅下面的示例

TextWatcher autoAddTextWatcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        int value1 = Integer.parseInt(editText1.getText().toString());
        int value2 = Integer.parseInt(editText2.getText().toString());
        editText3.setText(value1 + value2);
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
};

editText1.addTextChangedListener(autoAddTextWatcher);
editText2.addTextChangedListener(autoAddTextWatcher);

如果检查EditText是否为空,可能会更好,因此您的应用程序不会强制关闭。例如:

int value1 = TextUtils.isEmpty(editText1.getText().toString()) ? 0 : Integer.parseInt(editText1.getText().toString());

不要忘记添加

android:inputType="number"

到EditText的XML,将用户输入限制为数字,因此不存在NumberFormatException。

答案 1 :(得分:0)

您可以对EditText的两个代码使用以下代码

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        if(!s.equals("") )
                { //do your work here }
        }

    }

    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {

    }

    public void afterTextChanged(Editable s) {

    }
});

答案 2 :(得分:0)

做这样的事情:

    a.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (!b.getText().toString().equals("") && !a.getText().toString().equals("")) {
                    c.setText(String.valueOf(Integer.valueOf(a.getText().toString()) + Integer.valueOf(b.getText().toString())));
                }    
                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            });

答案 3 :(得分:0)

您可以使用 TextWatcher 。它允许我们在运行时监视任何EditText中对文本所做的更改。 TextWatcher作为一个监听器,附加到EditText,并使您能够监视对相应EditText所做的更改。

它包含3个方法,如下:

<强> 1。 afterTextChanged():在更改文本后调用此方法。

<强> 2。 beforeTextChanged():当文本即将由某些新文本更新时,将调用此方法。

<强> 2。 onTextChanged():刚刚更新文本时调用此方法。

示例:

editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

使用onTextChanged()方法执行所需的计算。

More info on TextWatcher