昨天学会使用getCheckedRadioButtonId
这功能一般都用在表单单选
例如:性别、年龄区间、问卷满意程度
今天要的是点选完後直接变更输出结果
比如:原本为温度为摄氏,点选华氏RadioButton後,马上把摄氏温度的结果转变为华氏的温度结果
今天来学习速度单位转换,把台湾常用的公里/小时和美国用的英里/小时做转换
先拉出两个RadioButton,并且把他们包在一个RadioGroup里面
一个EditText给使用者输入数值
两个TextView分别显示公里/小时、英里/小时的速度
当使用者输入好数值,选择输入的值为公里或是英里
下面TextView马上显示转换後的数值
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="70dp"
android:text="输入格式"
android:textSize="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="@+id/textView"
app:layout_constraintStart_toStartOf="@+id/textView"
app:layout_constraintTop_toBottomOf="@+id/textView">
<RadioButton
android:id="@+id/rb_mi"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="英里" />
<RadioButton
android:id="@+id/rb_km"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="公里" />
</RadioGroup>
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/radioGroup" />
<TextView
android:id="@+id/tv_km"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="公里/小时:"
android:textSize="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_mi" />
<TextView
android:id="@+id/tv_mi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="英里/小时:"
android:textSize="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText" />
</androidx.constraintlayout.widget.ConstraintLayout>
增加:
RadioGroup的setOnCheckedChangeListener监听事件:点选马上变更显示结果
EditText的addTextChangedListener监听事件:新增或删减字马上更改结果
1公里 = 0.621371192英里
我们要把公里、英里计算完
才能显示出来结果
因为两个监听事件的程序码一样
所以我们把计算和显示的程序码写到自订的calc()里
之後再去呼叫
addTextChangedListener有三个要引入三个方法
目前用不到onTextChanged、beforeTextChanged
但仍需要写这两种方法出来
只是里面不需要写程序
package com.example.km;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements TextWatcher, RadioGroup.OnCheckedChangeListener {
private RadioGroup radioGroup;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radioGroup = findViewById(R.id.radioGroup);
editText = findViewById(R.id.editText);
radioGroup.setOnCheckedChangeListener(this);
editText.addTextChangedListener(this);
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//目前用不到
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//目前用不到
}
@Override
public void afterTextChanged(Editable editable) {
calc();
}
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
calc();
}
private void calc() {
TextView tv_km = findViewById(R.id.tv_km);
TextView tv_mi = findViewById(R.id.tv_mi);
double km,mi;
if (radioGroup.getCheckedRadioButtonId() == R.id.rb_km){
km = Double.parseDouble(editText.getText().toString());
mi = km*0.621;
}
else{
mi = Double.parseDouble(editText.getText().toString());
km = mi/0.621;
}
tv_km.setText("公里/小时:"+km);
tv_mi.setText("英里/小时:"+mi);
}
}
执行结果:
预设为英里
点选英里
点选公里
前言 以前很经常使用 GitHub 上的各种套件, 不管是大到页面,小到按钮,深到语法,都喜欢用自己...
DBA Bootcamp 几天前,oncall DBA 接到请求支援的电话,状况是这样的… 有一个 ...
这篇文诞生的原因: 我从小就对资讯世界抱持着莫大的好奇与憧憬,到了高中稍微接触程序语言後让我更加想了...
前言 昨天我们设计好UI介面後, 我们有一堆按钮和文字框的"元件", 要让这些元...
箭头函式 传统函式 const callName = function(someone){ retu...