CheckBox с кастомным текстом
Есть у меня элемент CheckBox который имеет атрибут Text. Я в CheckBox могу поместить только текст одного цвета и с откликом на клик только на весь текст а не наотдельные слова по отдельности и разные функции клика.
Как вы видите в ConstrantLayout довольно сложно выровнять элементы.
Мне нужно что бы желательно это было одним элементом как CheckBox
Внимание вопрос
- Можно ли текст который на
CheckBoxзаменит на HTML? Если да то можно ли сделать HTML кликабельным? - Можно как-то через код написать текст и сделать некоторые слова кликабельными + и задать етим же словам другой цвет?
- Может есть кастомные другие виды таких 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
}
