Кликабельный текст чекбокс в Android с Kotlin - PullRequest
0 голосов
/ 05 января 2019

Я создаю приложение для Android с kotlin. Я достиг точки, что у меня есть лицензионное соглашение с конечным пользователем checkbox, и мне нужно сделать часть текста флажка интерактивной, чтобы отобразить условия.

XML-файл

 <CheckBox
    android:id="@+id/accept_terms_and_conditions"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:layout_marginBottom="8dp"
    android:text="I have read and accept the Terms &amp; Conditions"
    android:textColor="#000000"
    android:textSize="16sp"/>

Я хочу, чтобы часть Terms & Conditions была кликабельной. Я уже попробовал код ниже. Первоначально это был java код, найденный здесь , и он автоматически преобразовывался в kotlin с помощью Android Studio, но мне не очень повезло с ним, так как приложение зависало при запуске SignUpActivity.

файл Kotlin

class SignUpActivity : AppCompatActivity() {

    private var mAuthTask: UserSignUpTask? = null


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sign_up)


        val checkBox = findViewById<TextView>(R.id.accept_terms_and_conditions)

        val text = getText(R.string.terms_and_conditions)

        val ss = SpannableString(text)

        val clickableSpan1 = object : ClickableSpan() {

            override fun onClick(widget: View) {
                    Toast.makeText(this@SignUpActivity, "One", Toast.LENGTH_SHORT).show()
            }

            override fun updateDrawState(ds: TextPaint) {
                super.updateDrawState(ds)
                ds.color = Color.BLUE
                ds.isUnderlineText = false
            }
        }

        ss.setSpan(clickableSpan1, 28, 46, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

        checkBox.text = ss
        checkBox.movementMethod = LinkMovementMethod.getInstance()
    }
}

Так есть ли способ сделать это непосредственно из файла XML? И если нет, как я могу сделать это в Kotlin?

Примечание: API, который я разрабатываю, - 21.

Ответы [ 2 ]

0 голосов
/ 05 января 2019

С помощью @Karan Mer и некоторого кода, найденного здесь проблема решена, поэтому я представлю общее решение здесь.

XML-файл

<LinearLayout
        android:id="@+id/checkbox_Layout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <CheckBox
            android:id="@+id/accept_terms_and_conditions"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>


        <TextView
            android:id="@+id/Terms_and_condition_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="0dp"
            android:layout_marginBottom="0dp"
            android:text="I have read and accept the Terms & Conditions"
            android:textColor="#000000"
            android:textSize="16sp"/>
    </LinearLayout>

файл Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_sign_up)



    val textView = findViewById<TextView>(R.id.Terms_and_condition_text)

    val text = getText(R.string.terms_and_conditions)

    val ss = SpannableString(text)

    val clickableSpan1 = object : ClickableSpan() {
        override fun onClick(widget: View) {
            //here you can set it to do whatever you want when clicked
        }


        //This is in order to change the default appereance of the link
        override fun updateDrawState(ds: TextPaint) {
            super.updateDrawState(ds)
            ds.color = Color.BLUE
            ds.isUnderlineText = false
        }
    }

    //here you set the starting and ending char of the link in the string
    ss.setSpan(clickableSpan1, 28, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

    textView.text = ss
    textView.movementMethod = LinkMovementMethod.getInstance()
}
0 голосов
/ 05 января 2019

Вы можете сделать что-то вроде этого, использовать горизонтальный LinearLayout с CheckBox без текста и TextView, который вы хотите отобразить как текст флажка. Теперь вы можете индивидуально обрабатывать клики как для флажка, так и для просмотра текста.

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

        <CheckBox
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="I agree to terms and conditions"/>
    </LinearLayout>

Результат выглядит как показано ниже.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...