如何在android中通过单击创建自定义视图
这是我的课如何在android中通过单击创建自定义视图,android,Android,这是我的课 import android.content.Context import android.util.AttributeSet import android.view.View import androidx.appcompat.widget.AppCompatTextView import timber.log.Timber class ContactUsLink : AppCompatTextView, View.OnClickListener { construct
import android.content.Context
import android.util.AttributeSet
import android.view.View
import androidx.appcompat.widget.AppCompatTextView
import timber.log.Timber
class ContactUsLink : AppCompatTextView, View.OnClickListener {
constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) {
init()
}
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
init()
}
constructor(context: Context?) : super(context) {
init()
}
private fun init() {
setOnClickListener(this)
}
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
}
override fun onClick(v: View?) {
Timber.d("Click Event ");
// Do whatever you need to
}
}
这是我的XML调用,如下所示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/background_grey"
android:orientation="vertical">
<com.tesco.clubcardmobile.features.common.customview.ContactUsLink
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="12dp"
android:text="Click Here"
android:layout_marginLeft="20dp"
android:layout_marginTop="10dp"/>
</LinearLayout>
我可以在布局显示文本视图中显示视图,但当我单击文本视图中的文本时,单击不起作用。请告诉我如何应用单击功能。在自定义视图上调用
setMovementMethod(LinkMovementMethod.getInstance())
,它将打开浏览器
不再需要onClick
方法,因为LinkMovementMethod
将为您完成所有工作。此外,您还可以使用UrlSpannable
这是您更新的自定义视图。它不再需要OnClickListener
和Context
不再需要可为空的类型
import android.content.Context
import android.text.SpannableString
import android.text.Spanned
import android.text.method.LinkMovementMethod
import android.text.style.URLSpan
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatTextView
class ContactUsLink : AppCompatTextView {
constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(
context,
attrs,
defStyle
) {
init()
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
init()
}
constructor(context: Context) : super(context) {
init()
}
private fun init() {
val spannableString = SpannableString(text.toString())
spannableString.setSpan(
URLSpan("https://developer.android.com/reference/android/text/style/URLSpan?authuser=1"),
0,
text.length,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
text = spannableString
movementMethod = LinkMovementMethod.getInstance()
}
}
这是您的XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/background_grey"
android:orientation="vertical">
<com.tesco.clubcardmobile.features.common.customview.ContactUsLink
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="12dp"
android:text="Click. Here"
android:layout_marginLeft="20dp"
android:layout_marginTop="10dp"/>
</LinearLayout>
如果您希望整个视图是可点击的,而不仅仅是文本跨度中的URL(可能时应避免,因为它可能是一个小的触摸目标),那么
override-fun-onClick(v:View){
val intent=intent(
意图、行动和观点,
解析https://www.tesco.com/help/contact/")
)
星触觉(意图)
}
谢谢您的回答。您能告诉我如何设置文本吗?我必须使用自定义视图设置文本XYA@ManojKumar添加了完整的代码。如果有帮助,请给我的答案打分并接受。我会非常感激的,它很有效。我查过了。但是您也可以在没有自定义视图的情况下执行相同的操作。好的,工作正常,但我想在自定义视图textview中设置文本。text=“XYA”我将如何设置set@ManojKumar更新。刚刚添加了UrlSpannable
。是你一直在寻找的吗?android:text=“单击.Here”。我不想在XML中设置我想在ContactUsLink中设置class@ManojKumar这将进入onClick()
处理程序。