需要帮助编辑editText之间的数学

时间:2012-02-22 03:47:59

标签: android math int

我需要帮助了解如何在不同的EditText视图之间完成数学运算。我不是要求别人给我写代码,但可能会解释完成这项工作所涉及的内容。

我想张贴这张照片,但作为新用户我不能。基本上我有一个EditText用于以下内容:宽度,长度,屋檐高度,间距。

我有所有TextViews的ID我不知道如何编程后台数学所涉及的工作。我确实需要执行数学运算所需的公式,不知道将它们放在java中的位置和方式。

基本上我需要用户在前4个框中输入一个数字。我需要使用一个等式来生成将在“SQFT”框中显示的答案。用户还将在成本框中输入一个数字,该数字框将生成需要在单独的TextView中显示的“总计”。

任何帮助都会受到赞赏,即使它是指向我的教程方向让我开始。谢谢你的帮助。

只是为了展示我需要使用什么类型的数学,下面是我用于excel计算的等式。

(length+width)*(Eave+1)*2 + (((width/2)/12*Pitch)*(width/2)*2)

1 个答案:

答案 0 :(得分:1)

我不确定您是否不知道如何提取在EditTexts中输入的数字,如何实际进行数学计算,如何让用户启动计算或如何呈现它。

我创建了一个包含2个EditTexts的小型演示,以及一个显示输入数字总和的TextView。用户不需要按任何按钮来执行计算,每次用户更新文本时都会自动执行(我认为这是你想要的)。

请注意这段代码不是很好的代码,它使用了许多内部匿名类等,但它应该展示如何执行此操作的机制。

这是 main.xml 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <EditText
        android:id="@+id/a"
        android:hint="input a"
        android:inputType="number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:minWidth="60dp"/>
    <EditText 
        android:id="@+id/b"
        android:hint="input b"
        android:inputType="number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:minWidth="60dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="a+b = " />
    <TextView
        android:id="@+id/total"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp" />

</LinearLayout>

这是示例活动:

package com.example;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;

public class SumActivity extends Activity
{
    private int a;
    private int b;
    private TextView totalOutput;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        EditText inputA = (EditText) findViewById(R.id.a);
        EditText inputB = (EditText) findViewById(R.id.b);
        totalOutput = (TextView) findViewById(R.id.total);
        inputA.addTextChangedListener(new TextChangedListener()
        {

            @Override
            public void numberEntered(int number)
            {
                a = number;
                updateTotal();
            }
        });
        inputB.addTextChangedListener(new TextChangedListener()
        {

            @Override
            public void numberEntered(int number)
            {
                b = number;
                updateTotal();
            }
        });
    }

    private void updateTotal()
    {
        int total = a + b; // This is where you apply your function
        totalOutput.setText("" + total); // need to do that otherwise int will
                                            // be treated as res id.
    }

    private abstract class TextChangedListener implements TextWatcher
    {

        public abstract void numberEntered(int number);

        @Override
        public void afterTextChanged(Editable s)
        {
            String text = s.toString();
            try
            {
                int parsedInt = Integer.parseInt(text);
                numberEntered(parsedInt);
            } catch (NumberFormatException e)
            {
                Log.w(getPackageName(), "Could not parse '" + text + "' as a number", e);
            }
        }

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

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count)
        {
        }
    }

}