我如何添加何时/如果到按钮(viewBinding)

Posted

技术标签:

【中文标题】我如何添加何时/如果到按钮(viewBinding)【英文标题】:how can I add when/if to buttons (viewBinding) 【发布时间】:2021-08-24 02:23:27 【问题描述】:

我正在尝试将 when 或 if 语句添加到我的代码中。例如,一旦我按下第一个/第二个按钮,它会将按钮、按钮 2 的颜色更改为红色。如果我只是按下按钮 3 它会变成绿色。如果还有更简单的方法我正在寻找它。

   `binding.button.isSelected
    binding.button.setOnClickListener 
        binding.button.setBackgroundColor(R.drawable.red)
    
    binding.button2.isSelected
    binding.button2.setOnClickListener 
        binding.button2.setBackgroundColor(R.drawable.red)
    
    binding.button3.isSelected
    binding.button3.setOnClickListener 
        binding.button3.setBackgroundColor(R.drawable.green)
    `

编辑

感谢@Tonnie,我确实弄清楚了,我必须更改几行才能按预期工作。这是代码;

var isRedButtonsClicked = true
var isGreenButtonClicked = true


    fun colorButtonsRed() 
        binding.button.setBackgroundColor(R.color.red)
        binding.button2.setBackgroundColor(R.color.red)
    

    fun colorButtonGreen() 
        binding.button3.setBackgroundColor(R.color.green)
    

    binding.button.setOnClickListener 
        when (isRedButtonsClicked) 
            true -> colorButtonsRed()
        

    

    binding.button2.setOnClickListener 
        when (isRedButtonsClicked) 
            true -> colorButtonsRed()
        

    

    binding.button3.setOnClickListener 
        when (isGreenButtonClicked) 
            true -> colorButtonGreen()
        

    

    setContentView(binding.root)

【问题讨论】:

这是最简单的方法。我不确定你为什么在那里有 isSelected 调用,除非你遗漏代码,否则我认为它不会做任何事情。您的代码中唯一的问题是 setBackgroundColor 采用颜色常量,而不是可绘制对象 @Talha,你学得很快,编辑得很好。欢迎来到*** 【参考方案1】:

我明白了,你需要按钮同时工作。

在这种情况下,请尝试构建此代码以满足您的需求。

首先创建一个var,我将其命名为isRedButtonsSelected 来监控 按钮状态。 添加 2 个函数来切换颜色 btw Green/RedGray(或任何 您选择的颜色) 添加 3 个 onClickListener 来更改按钮颜色

代码

class MainActivity : AppCompatActivity() 
    private lateinit var binding: ActivityMainBinding
    private var isRedButtonsClicked = false

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)


        binding.button.setOnClickListener 
            when (isRedButtonsClicked) 
                true -> colorButtons()
                false -> unColorButtons()
            

        

        binding.button2.setOnClickListener 
            when (isRedButtonsClicked) 
                true -> colorButtons()
                false -> unColorButtons()
            

        

        binding.button3.setOnClickListener 
            when (isRedButtonsClicked) 
                true -> colorButtons()
                false -> unColorButtons()
            

        

        setContentView(binding.root)

    


    private fun colorButtons() 
        binding.button.setBackgroundColor(Color.GRAY)
        binding.button2.setBackgroundColor(Color.GRAY)
        binding.button3.setBackgroundColor(Color.GREEN)
        isRedButtonsClicked = false

    

    private fun unColorButtons() 
        binding.button.setBackgroundColor(Color.RED)
        binding.button2.setBackgroundColor(Color.RED)
        binding.button3.setBackgroundColor(Color.GRAY)
        isRedButtonsClicked = true

    


【讨论】:

谢谢你,我做到了并编辑了我的帖子。我不得不更改几行,多亏了你,我才弄明白了!【参考方案2】:

@Gabe Sechan 是对的。您应该使用带有颜色常数的setBackgroundColor()

我不确定isSelected 的用途,但这段代码应该可以工作。

 override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)

        binding.button.setOnClickListener 
            binding.button.setBackgroundColor(Color.RED)
        

        binding.button2.setOnClickListener 
           
            binding.button2.setBackgroundColor(Color.RED)
        

        binding.button3.setOnClickListener 
          
            binding.button3.setBackgroundColor(Color.GREEN)

        

        setContentView(binding.root)
        
    

【讨论】:

感谢您的努力,但这仍然不是我想要的。在这种情况下,只有一个按钮起作用。我想同时把“button”和“button2”的颜色改成红色。

以上是关于我如何添加何时/如果到按钮(viewBinding)的主要内容,如果未能解决你的问题,请参考以下文章

ViewBinding与RecycleView(一)

您何时需要为标签和按钮添加内容以防止它们占用文本字段的空间?

UIButton 的帧大小何时最终设置

如何检测 iPhone MPMoviePlayer 控件何时出现/消失?

动态添加字段到表单

如果单击保存文件对话框上的取消按钮怎么办?