CheckBox с кастомным текстом

Есть у меня элемент CheckBox который имеет атрибут Text. Я в CheckBox могу поместить только текст одного цвета и с откликом на клик только на весь текст а не наотдельные слова по отдельности и разные функции клика.

Напримервведите сюда описание изображения

Как вы видите в ConstrantLayout довольно сложно выровнять элементы. Мне нужно что бы желательно это было одним элементом как CheckBox

Внимание вопрос

  1. Можно ли текст который на CheckBox заменит на HTML? Если да то можно ли сделать HTML кликабельным?
  2. Можно как-то через код написать текст и сделать некоторые слова кликабельными + и задать етим же словам другой цвет?
  3. Может есть кастомные другие виды таких CheckBOX которым можно задавать все выше описанные функции?

Ответы (1 шт):

Автор решения: Vlad Bulan

Вот активность с полным описанием ответа на мой вопрос

override fun onCreate(savedInstanceState: Bundle?) {
                            super.onCreate(savedInstanceState)
                //тут у меня организован ViewBinding на это не обращайте внимание
                            binding = ActivitySignUpBinding.inflate(layoutInflater)
                            val view = binding.root
                            setContentView(view)
                            activity = this
                            viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
                    //Создаем переменную которая будет отвечать на отклик и на оформление нудного нам текста
                            val clickablePrivacy: ClickableSpan = object : ClickableSpan() {
                                override fun onClick(p0: View) {
                                   // организовуве отзыв на клик
                                }
                                override fun updateDrawState(ds: TextPaint) {
                                    super.updateDrawState(ds)
                                    ds.isUnderlineText = true
                                    ds.color = getColor(R.color.button)
                               // задаем окраску и все стилевое оформление текста
                                }
                            }
        // для второго текста тоже нужно создать переменную с параметрами отзыва на отклик
                            val clickableTerm: ClickableSpan = object : ClickableSpan() {
                                override fun onClick(p0: View) {
                                    p0.setOnClickListener { activity toast getString(R.string.term_of_service) }
                                }
                                override fun updateDrawState(ds: TextPaint) {
                                    super.updateDrawState(ds)
                                    ds.isUnderlineText = true
                                    ds.color = getColor(R.color.button)
                                }
                            }
                    //Создаем переменную которая будет переносить кнопку, оформление и добавляем в нее текст
                            val privacyPolicy = SpannableString(getString(R.string.privacy_policy))
    // в переменну добавляем параметры
                            privacyPolicy.setSpan(clickablePrivacy, 0, privacyPolicy.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
                            val term = SpannableString(getString(R.string.term_of_service))
                            term.setSpan(clickableTerm, 0, term.length,  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
                            val privacy = TextUtils.expandTemplate(getString(R.string.privacy) +" ^1 ,\nand "+ "^2", privacyPolicy, term)
                    // засуваем в CheckBox обработаный весь текст
                            binding.cbRememder.text = privacy
                        }
→ Ссылка