如何在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()
处理程序。