带有Kotlin的android中的Clickable复选框文本

时间:2019-01-05 01:02:14

标签: android android-studio checkbox kotlin

我正在使用kotlin创建一个Android应用。我已经达到了EULA(最终用户许可协议)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部分。我已经尝试过下面的代码。最初是在here处找到java代码,并由kotlin自动转换为Android Studio,但是我对它的运气并不满意,因为当{{ 1}}开始。

  

Kotlin文件

SignUpActivity

有什么办法可以直接从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中做到这一点?

注意:我正在开发的应用程序的API是21。

2 个答案:

答案 0 :(得分:1)

在@Karan Mer的帮助下,here找到了一些代码,问题得以解决,因此我将在此处介绍整体解决方案。

  

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>
  

科特琳文件

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()
}

答案 1 :(得分:0)

您可以执行以下操作,将水平LinearLayout与没有文本的CheckBox一起使用,并将要显示为复选框文本的TextView用作文本。现在,您可以分别处理复选框和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