Android Studio Kotlin中如何通过EditText输入修改ProgressBar进度
代码错误点
- 直接将
EditText控件实例与字符'2'做比较,未获取输入框内的实际文本,也未做数字类型转换,比较逻辑完全无效 - 判断阈值与需求不符:需求是输入值大于10时触发进度增长,代码中写的判断条件是和字符'2'对比
- 未做输入合法性校验:如果用户输入非数字内容,直接做数字转换会触发程序崩溃
- 未对齐百分比进度逻辑:
incrementProgressBy()传入的是进度单位增量,不是百分比,需要结合ProgressBar的max值计算对应增量
可直接运行的实现代码
先确认布局中ProgressBar的配置,代码中主动将max设为100时,10%进度刚好对应10个进度单位,计算最简便:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.first_gamble) val progressbar = findViewById<ProgressBar>(R.id.progressBar) val inputEt = findViewById<EditText>(R.id.gamblesum) val confirmBtn = findViewById<Button>(R.id.button6) // 初始化进度条最大值,按百分比计算时统一用100作为最大值最方便 progressbar.max = 100 progressbar.progress = 0 confirmBtn.setOnClickListener { // 获取输入内容,去除首尾空格 val inputContent = inputEt.text.toString().trim() // 安全转换为整数,输入非数字时返回null不会崩溃 val inputNum = inputContent.toIntOrNull() when { inputNum == null -> { // 输入非数字时给输入框标错提示 inputEt.error = "请输入有效数字" } inputNum > 10 -> { // 满足条件进度加10% progressbar.incrementProgressBy(10) // 进度封顶处理,避免超过最大值 if (progressbar.progress > progressbar.max) { progressbar.progress = progressbar.max } } } } } }
适配说明
- 如果你的ProgressBar自定义过max值(比如max=500),那10%对应的增量不要硬写10,替换为
progressbar.max / 10即可 - 如果不需要点击按钮触发,想要输入内容时实时更新进度,可以给EditText绑定
TextWatcher监听文本变化,在onTextChanged回调里写判断逻辑即可 - 如果需要支持小数输入,把
toIntOrNull()替换为toDoubleOrNull()即可,判断逻辑保持不变
内容的提问来源于stack exchange,提问作者Pierre Chevin
相关产品推荐
相关产品推荐

