我正在使用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 & 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。
答案 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>
结果如下所示。