选中“Service Call”后如何将TextInputEditText设为只读并置灰
解决方案:选中"Service Call"后设置TextInputEditText只读并置灰
首先确保你已获取到目标TextInputEditText的实例(比如通过findViewById或ViewBinding),假设该输入框变量名为surveyDateEt,在现有观察回调中补充以下逻辑即可实现需求:
processViewModel.isServiceCall.observe(viewLifecycleOwner){ isServiceCall -> if (isServiceCall){ val surveyDateAndTime: String = DateUtil.localFullDateToDateStringFormatted(Date()) processViewModel.surveySiteFormInfo .siteSurveyStepOneInfo .surveyDataAndTimeWorkPerformedInfo .surveyDateAndTime = surveyDateAndTime // 设置输入框只读并置灰 surveyDateEt?.apply { // 禁止焦点获取与输入交互 isFocusable = false isFocusableInTouchMode = false isClickable = false keyListener = null // 设置文本为灰色(可替换为项目自定义资源色,如R.color.text_grey) setTextColor(ContextCompat.getColor(context, android.R.color.darker_gray)) } room_add_layout?.isEnabled = false room_add_layout?.setOnClickListener(null) } else{ processViewModel.surveySiteFormInfo .siteSurveyStepOneInfo .surveyDataAndTimeWorkPerformedInfo .surveyDateAndTime = "" // 恢复输入框可编辑状态与正常文本色 surveyDateEt?.apply { isFocusable = true isFocusableInTouchMode = true isClickable = true // 恢复默认输入监听 keyListener = TextKeyListener.getInstance() // 恢复默认文本颜色(替换为项目正常文本色,如R.color.text_black) setTextColor(ContextCompat.getColor(context, android.R.color.black)) } } }
关键逻辑说明:
- 只读实现:通过
isFocusable、isFocusableInTouchMode、isClickable禁用交互,配合keyListener = null彻底屏蔽输入能力,比仅设置isEnabled = false更贴合"只读"场景(后者会让整个控件样式变灰,而此方案可保留控件基础样式)。 - 文本置灰:使用
setTextColor设置灰色文本,推荐使用项目中定义的资源色,避免硬编码颜色值。 - 状态恢复:取消选中时需将输入框的交互性和文本颜色恢复至初始状态,避免影响后续操作。
若项目使用ViewBinding,直接通过Binding对象获取输入框实例即可,无需findViewById。
内容的提问来源于stack exchange,提问作者OEThe11
相关产品推荐
相关产品推荐

