如何实现3个EditText求和至另一EditText,并根据结果设置背景色?
Android 实现EditText内容求和并根据结果设置背景色
嘿,这个需求实现起来其实挺简单的,我给你拆解下具体步骤和代码示例,保证能搞定~
核心实现思路
- 先获取三个输入框的内容,一定要处理空值或者非数字的情况,不然容易崩溃
- 将输入内容转为数字后求和
- 根据求和结果设置目标输入框的背景色和显示内容
- 推荐用按钮触发求和操作,当然也可以监听输入框文本变化实时更新,不过按钮触发更稳妥
布局文件示例
首先你需要在布局里定义四个EditText和一个触发按钮,给每个控件设置好ID:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <EditText android:id="@+id/et1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入数字1" android:inputType="numberDecimal"/> <EditText android:id="@+id/et2" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入数字2" android:inputType="numberDecimal"/> <EditText android:id="@+id/et3" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入数字3" android:inputType="numberDecimal"/> <Button android:id="@+id/btnCalculate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="计算求和" android:layout_marginVertical="16dp"/> <EditText android:id="@+id/et33" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="求和结果" android:enabled="false"/> <!-- 设为不可编辑,只用来展示结果 --> </LinearLayout>
Java 代码实现
如果你的项目用Java开发,直接把下面的代码放到你的Activity里就行:
import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private EditText et1, et2, et3, et33; private Button btnCalculate; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 绑定布局里的控件 et1 = findViewById(R.id.et1); et2 = findViewById(R.id.et2); et3 = findViewById(R.id.et3); et33 = findViewById(R.id.et33); btnCalculate = findViewById(R.id.btnCalculate); // 给按钮设置点击事件,点击时执行求和逻辑 btnCalculate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { calculateSum(); } }); } private void calculateSum() { // 获取输入内容,空内容默认转为0 String text1 = et1.getText().toString().trim(); String text2 = et2.getText().toString().trim(); String text3 = et3.getText().toString().trim(); double num1 = text1.isEmpty() ? 0 : Double.parseDouble(text1); double num2 = text2.isEmpty() ? 0 : Double.parseDouble(text2); double num3 = text3.isEmpty() ? 0 : Double.parseDouble(text3); // 计算求和 double sum = num1 + num2 + num3; // 显示结果到et33 et33.setText(String.valueOf(sum)); // 根据结果设置背景色 if (sum == 18) { et33.setBackgroundColor(Color.GREEN); } else { et33.setBackgroundColor(Color.RED); } } }
Kotlin 代码实现
如果是Kotlin项目,代码会更简洁:
import android.graphics.Color import android.os.Bundle import android.widget.Button import android.widget.EditText import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { private lateinit var et1: EditText private lateinit var et2: EditText private lateinit var et3: EditText private lateinit var et33: EditText private lateinit var btnCalculate: Button override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 绑定控件 et1 = findViewById(R.id.et1) et2 = findViewById(R.id.et2) et3 = findViewById(R.id.et3) et33 = findViewById(R.id.et33) btnCalculate = findViewById(R.id.btnCalculate) // 按钮点击触发求和 btnCalculate.setOnClickListener { calculateSum() } } private fun calculateSum() { // 安全转换数字,空或非数字内容默认转为0.0 val num1 = et1.text.toString().trim().toDoubleOrNull() ?: 0.0 val num2 = et2.text.toString().trim().toDoubleOrNull() ?: 0.0 val num3 = et3.text.toString().trim().toDoubleOrNull() ?: 0.0 val sum = num1 + num2 + num3 // 显示结果 et33.setText(sum.toString()) // 根据结果切换背景色 et33.setBackgroundColor(if (sum == 18.0) Color.GREEN else Color.RED) } }
几个关键注意点
- 空值/非数字处理:如果用户没输入内容,或者输入了非数字字符,直接转数字会抛出异常,所以一定要做判断(Java里的空值判断、Kotlin里的
toDoubleOrNull()) - 输入类型限制:给输入框设置
android:inputType="numberDecimal",可以限制用户只能输入数字,减少异常情况 - 结果框不可编辑:把et33设为
android:enabled="false",避免用户修改结果,只做展示用 - 整数求和适配:如果只需要整数求和,把代码里的
Double改成Int就行,比如Java用Integer.parseInt(),Kotlin用toIntOrNull()
内容的提问来源于stack exchange,提问作者alz
相关产品推荐
相关产品推荐

