如果 EditText 字段中有文本,如何更改 backgroundtint 颜色?

Posted

技术标签:

【中文标题】如果 EditText 字段中有文本,如何更改 backgroundtint 颜色?【英文标题】:How do you change backgroundtint colour if there is text in EditText Field? 【发布时间】:2021-12-24 20:16:42 【问题描述】:

下午好,我想在我的 editText 字段中有文本后触发我的按钮更改颜色,我想知道你如何不断地进行此检查,而不是片段启动一次?

我的片段代码

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) 
        super.onViewCreated(view, savedInstanceState)
        navc = Navigation.findNavController(view)
        registerObservers()
        setListeners(view)
        onTextChanged()
    


    override fun onCreate(savedInstanceState: Bundle?) 
        setHasOptionsMenu(true)
        super.onCreate(savedInstanceState)
        requireActivity().onBackPressedDispatcher.addCallback(this) 
            navc!!.navigate(R.id.orderListFragment)
        
    

    private fun registerObservers() 
        accountViewModel.profile.observe(viewLifecycleOwner) 
        
    

    private fun onTextChanged() 
        if (restaurantEmail.editableText.isNotEmpty()) 
            sendhtmlcode.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.standardOrange))
        else
            println("Testingprint")
            sendHtmlcode.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.standardGrey))

        

第一次上色时没有文字,但之后不再检查,我不明白为什么不检查

【问题讨论】:

【参考方案1】:

您可以使用doOnTextChanged 函数来触发 EditText 中的每次文本更改。它在内部使用TextWatcher

editText.doOnTextChanged  text, start, before, count -> 
    onTextChanged()

【讨论】:

【参考方案2】:

你可以使用doOnTextChange这是textView的kotlin扩展功能。

import androidx.core.widget.doOnTextChanged

yourEditText.doOnTextChange  text, start, before, count ->
  // here you check if the input is empty
  onTextChanged(text.isNotEmpty())


private fun onTextChanged(isNotEmpty: Boolean) 
    if (isNotEmpty) 
        sendHtmlcode.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.standardOrange))
    else
        println("Testingprint")
        sendHtmlcode.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.standardGrey))

    

【讨论】:

以上是关于如果 EditText 字段中有文本,如何更改 backgroundtint 颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何给更多的EditText字段一种单行的感觉

android TextWatcher 更改外部类私有字段

如何更改各种微调器值的 EditText 字段

如何从另一个活动中编辑和获取 editText 输入字段的更新?

如何在 android 中动态更改 EditText 小部件的文本大小?

编辑时如何更改 UITextField