ক্লিকযোগ্য লিঙ্কগুলির সাথে অ্যান্ড্রয়েড টেক্সটভিউ: ক্লিকগুলি কীভাবে ক্যাপচার করবেন?


116

আমার কাছে একটি টেক্সটভিউ রয়েছে যা 2+ লিঙ্কযুক্ত বেসিক এইচটিএমএল উপস্থাপন করছে। আমার নিজের অভ্যন্তরীণ ওয়েবভিউতে (ডিফল্ট ব্রাউজারে নয়) লিঙ্কগুলিতে ক্লিকগুলি ক্যাপচার করতে এবং লিঙ্কগুলি খুলতে হবে)

লিঙ্ক রেন্ডারিং হ্যান্ডেল করার সর্বাধিক প্রচলিত পদ্ধতি এটির মতো বলে মনে হয়:

String str_links = "<a href='http://google.com'>Google</a><br /><a href='http://facebook.com'>Facebook</a>";
text_view.setLinksClickable(true);
text_view.setMovementMethod(LinkMovementMethod.getInstance());
text_view.setText( Html.fromHtml( str_links ) );

যাইহোক, এর ফলে ডিফল্ট অভ্যন্তরীণ ওয়েব ব্রাউজারে লিঙ্কগুলি খোলার কারণ হয় ("সম্পূর্ণ অ্যাকশন ব্যবহার করে ..." ডায়ালগ দেখানো হয়)।

আমি অনক্লিকলিস্টনার বাস্তবায়নের চেষ্টা করেছি, যা লিঙ্কটি ক্লিক করা হলে সঠিকভাবে ট্রিগার হয়ে যায়, তবে কী লিঙ্কটি ক্লিক করা হয়েছিল তা নির্ধারণ করার জন্য আমি জানি না ...

text_view.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {
        // what now...?
    }

});

বিকল্পভাবে, আমি একটি কাস্টম লিংক মোভমেন্টমেডোড ক্লাস তৈরি করার চেষ্টা করেছি এবং অন টাচএভেন্ট প্রয়োগ করেছি ...

public boolean onTouchEvent(TextView widget, Spannable text, MotionEvent event) {
    String url = text.toString();
    // this doesn't work because the text is not necessarily a URL, or even a single link... 
    // eg, I don't know how to extract the clicked link from the greater paragraph of text
    return false;
}

ধারনা?


উদাহরণ সমাধান

আমি একটি সমাধান নিয়ে এসেছি যা এইচটিএমএল স্ট্রিংয়ের লিঙ্কগুলিকে পার্স করে এবং সেগুলিকে ক্লিকযোগ্য করে তোলে এবং তারপরে আপনাকে ইউআরএলে প্রতিক্রিয়া জানাতে দেয়।


1
আপনি কেন স্প্যানিয়েবল স্ট্রিং ব্যবহার করবেন না? ??
রেনজিথ

1
বাস্তবে, এইচটিএমএল আমার অ্যাপ্লিকেশন দ্বারা উত্পাদিত নয়, একটি রিমোট সার্ভার দ্বারা সরবরাহ করা হয়।
জেন ক্লেস

আপনার উদাহরণ সমাধান খুব সহায়ক; এই পদ্ধতির সাহায্যে আমি ক্লিকগুলি দুর্দান্তভাবে ক্যাপচার করি এবং কোন লিঙ্কটি ক্লিক করা হয়েছিল তার উপর নির্ভর করে পরামিতিগুলির সাথে অন্য ক্রিয়াকলাপ চালু করতে পারি। (বোঝার মূল বিষয়টি ছিল "এর সাথে কিছু করুন span.getURL()")) আপনি এটি উত্তর হিসাবে পোস্টও করতে পারেন, কারণ এটি বর্তমানে গৃহীত উত্তরের চেয়ে ভাল!
জোনিক

উত্তর:


223

অন্য উত্তরের ভিত্তিতে , এখানে একটি ফাংশন সেটটেক্সটভিউ এইচটিএমএল () রয়েছে যা এইচটিএমএল স্ট্রিংয়ের লিঙ্কগুলিকে পার্স করে এবং সেগুলিকে ক্লিকযোগ্য করে তোলে এবং তারপরে আপনাকে ইউআরএলে প্রতিক্রিয়া জানাতে দেয়।

protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span)
{
    int start = strBuilder.getSpanStart(span);
    int end = strBuilder.getSpanEnd(span);
    int flags = strBuilder.getSpanFlags(span);
    ClickableSpan clickable = new ClickableSpan() {
        public void onClick(View view) {
            // Do something with span.getURL() to handle the link click...
        }
    };
    strBuilder.setSpan(clickable, start, end, flags);
    strBuilder.removeSpan(span);
}

protected void setTextViewHTML(TextView text, String html)
{
    CharSequence sequence = Html.fromHtml(html);
    SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
    URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);   
    for(URLSpan span : urls) {
        makeLinkClickable(strBuilder, span);
    }
    text.setText(strBuilder);
    text.setMovementMethod(LinkMovementMethod.getInstance());       
}

5
দুর্দান্ত কাজ করেছেন এই পদ্ধতির সাথে (অন্যান্য উত্তরগুলির বিপরীতে), আমি 1 টি ক্লিক ক্যাপচার করতে সক্ষম হয়েছি এবং 2) কোন লিঙ্কটি ক্লিক করা হয়েছিল তার উপর নির্ভর করে পরামিতিগুলির সাথে অন্য ক্রিয়াকলাপ চালু করলাম।
জোনিক

নিখুঁত ... আমার দিনটি সংরক্ষণ করা হয়েছে
maverickosama92

আশ্চর্যজনক, তবে আপনি যদি এটি তালিকাভিউতে প্রয়োগ করেন (মানে, প্রতিটি উপাদানটির অভ্যন্তরীণ পাঠ্য ভিউতে), তালিকাটি অকেজোযোগ্য করে তুলছে, যদিও লিঙ্কগুলি এখনও ক্লিকযোগ্য
ভোগদেভ ২

@voghDev ListViewযখন Viewএর focusableসত্য হয়ে যায় তখন এর সাথে ঘটে । এটি সাধারণত Buttons / ImageButtons এর সাথে ঘটে । setFocusable(false)আপনার সাথে ফোন করার চেষ্টা করুন TextView
সুফিয়ান

text.setMovementMethod(LinkMovementMethod.getInstance());ইউআরএলস্প্যান না ব্যবহার করে তা নিশ্চিত করুন
rajath

21

আপনি নিম্নলিখিত হিসাবে সম্পন্ন করেছেন:

text_view.setMovementMethod(LinkMovementMethod.getInstance());
text_view.setText( Html.fromHtml( str_links ) );

আপনি কি নীচের মত বিপরীত ক্রমে চেষ্টা করেছেন?

text_view.setText( Html.fromHtml( str_links ) );
text_view.setMovementMethod(LinkMovementMethod.getInstance());

এবং ছাড়া:

text_view.setLinksClickable(true);

3
এটি কাজ করে কিন্তু কোনও সংকেত ছাড়াই যে ব্যবহারকারী লিঙ্কটি ক্লিক করেছে, লিঙ্কটি ক্লিক করা হলে আমার কিউ / অ্যানিমেশন / হাইলাইট দরকার ... আমার কী করা উচিত?
লাইটসাবার

@ স্টার ওয়ার্স আপনি খাঁটি অ্যান্ড্রয়েডে (স্টেটলিস্ট) [ বিকাশকারী.অ্যান্ড্রয়েড. com/intl/pt-br/guide/topics/resources/… ব্যবহার করতে পারেন , তবে এইচটিএমএল দিয়ে আমি জানি না।
ademar111190

20

স্প্যানিয়েবল স্ট্রিং ব্যবহার করে এটি সহজেই সমাধান করা যেতে পারে you আপনি যা করতে চান তা (ব্যবসায়িক আবশ্যকতা) আমার কাছে কিছুটা অস্পষ্ট তাই নিম্নলিখিত কোডটি আপনার পরিস্থিতির সঠিক উত্তর দেবে না তবে আমি নিশ্চিত যে এটি আপনাকে কিছু ধারণা দেবে এবং আমি নিশ্চিত যে আপনি নিম্নলিখিত কোডের উপর ভিত্তি করে আপনার সমস্যার সমাধান করতে সক্ষম হবেন।

আপনি যেমন করেন, আমি এইচটিটিপি প্রতিক্রিয়াটির মাধ্যমেও কিছু ডেটা পাচ্ছি এবং আমি আমার "আরও" ক্ষেত্রে কিছু অতিরিক্ত আন্ডারলাইনযুক্ত পাঠ্য যুক্ত করেছি এবং এই আন্ডারলাইন করা পাঠ্যটি ক্লিক ইভেন্টে ওয়েব ব্রাউজারটি খুলবে ope আশা করি এটি আপনাকে সহায়তা করবে ope

TextView decription = (TextView)convertView.findViewById(R.id.library_rss_expan_chaild_des_textView);
String dec=d.get_description()+"<a href='"+d.get_link()+"'><u>more</u></a>";
CharSequence sequence = Html.fromHtml(dec);
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
UnderlineSpan[] underlines = strBuilder.getSpans(0, 10, UnderlineSpan.class);   
for(UnderlineSpan span : underlines) {
    int start = strBuilder.getSpanStart(span);
    int end = strBuilder.getSpanEnd(span);
    int flags = strBuilder.getSpanFlags(span);
    ClickableSpan myActivityLauncher = new ClickableSpan() {
        public void onClick(View view) {
            Log.e(TAG, "on click");
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(d.get_link()));
            mContext.startActivity(intent);         
        }
    };
    strBuilder.setSpan(myActivityLauncher, start, end, flags);
}
decription.setText(strBuilder);
decription.setLinksClickable(true);
decription.setMovementMethod(LinkMovementMethod.getInstance());

গ্রেট! আমি আমার মামলার জন্য এটি পরিবর্তন করেছি। আমি কোডটি অন্তর্ভুক্ত করার জন্য আমার পোস্টটি সম্পাদনা করব।
জেন ক্লেস

এক্সএমএল এর অভ্যন্তরে কি একই রকম সমাধান পাওয়া যায়?
অ্যান্ড্রয়েড বিকাশকারী

আমি এটি ওপি-র পরিবর্তিত সংস্করণ (প্রশ্নে) দিয়ে কাজ করেছি, এটি দিয়ে নয় with (এই সংস্করণটি সহ, ক্লিকগুলি সরাসরি "ব্যবহার করে সম্পূর্ণ ক্রিয়া" ডায়লগে গিয়েছিল))
জোনিক

আমি এই যুক্তিটি ব্যবহার করেছি, তবে ইউআরএলস্প্যানের সাথে আন্ডারলাইনস্প্যানটি প্রতিস্থাপন করতে হয়েছিল Sp স্প্যানিয়েবল স্ট্রিংবিল্ডার থেকে পুরানো স্প্যানগুলি অপসারণ করার জন্য প্রয়োজনীয়।
রায়

4
এখানে ভেরিয়েবল 'ডি' কী?
সালমান খান

15

আমার একই সমস্যা হয়েছে তবে কয়েকটি লিঙ্ক এবং ইমেলের সাথে প্রচুর পাঠ্য মিশ্রিত হয়েছে। আমি মনে করি 'অটোলিঙ্ক' ব্যবহার করা এটির একটি সহজ এবং পরিষ্কার উপায়:

  text_view.setText( Html.fromHtml( str_links ) );
  text_view.setLinksClickable(true);
  text_view.setAutoLinkMask(Linkify.ALL); //to open links

আপনি লিংকাইফাই সেট করতে পারেন E EMAIL_ADDRESSES বা Linkify.WEB_URLS এর মধ্যে যদি কেবলমাত্র আপনি ব্যবহার করতে চান বা এক্সএমএল লেআউট থেকে সেট করতে চান তবে

  android:linksClickable="true"
  android:autoLink="web|email"

উপলভ্য বিকল্পগুলি হ'ল: ওয়েব, ইমেল, ফোন, মানচিত্র সব কিছুই


1
হাই কোনও কোনও লিঙ্কের ক্লিকের সময় বরখাস্ত উদ্দেশ্যকে বাধা দেওয়ার কোনও উপায় নেই
মনমোহন সোনি

1
এই উত্তরটি থেকে 6 বছর কেটে গেছে .. অবশ্যই এটি সর্বশেষতম অ্যান্ড্রয়েড সংস্করণে পরিবর্তিত হতে পারে ^^ এর অর্থ এটি আবার কাজ করে না ^^
জর্ডি

8

সমাধান

আমি একটি ছোট ক্লাস প্রয়োগ করেছি যার সাহায্যে আপনি টেক্সটভিউতে লম্বা ক্লিকগুলি নিজেই পরিচালনা করতে পারবেন এবং টেক্সটভিউয়ের লিঙ্কগুলিতে ট্যাপ করুন।

বিন্যাস

TextView android:id="@+id/text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:autoLink="all"/>

TextViewClickMovement.java

import android.content.Context;
import android.text.Layout;
import android.text.Spannable;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.util.Patterns;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.TextView;

public class TextViewClickMovement extends LinkMovementMethod {

    private final String TAG = TextViewClickMovement.class.getSimpleName();

    private final OnTextViewClickMovementListener mListener;
    private final GestureDetector                 mGestureDetector;
    private TextView                              mWidget;
    private Spannable                             mBuffer;

    public enum LinkType {

        /** Indicates that phone link was clicked */
        PHONE,

        /** Identifies that URL was clicked */
        WEB_URL,

        /** Identifies that Email Address was clicked */
        EMAIL_ADDRESS,

        /** Indicates that none of above mentioned were clicked */
        NONE
    }

    /**
     * Interface used to handle Long clicks on the {@link TextView} and taps
     * on the phone, web, mail links inside of {@link TextView}.
     */
    public interface OnTextViewClickMovementListener {

        /**
         * This method will be invoked when user press and hold
         * finger on the {@link TextView}
         *
         * @param linkText Text which contains link on which user presses.
         * @param linkType Type of the link can be one of {@link LinkType} enumeration
         */
        void onLinkClicked(final String linkText, final LinkType linkType);

        /**
         *
         * @param text Whole text of {@link TextView}
         */
        void onLongClick(final String text);
    }


    public TextViewClickMovement(final OnTextViewClickMovementListener listener, final Context context) {
        mListener        = listener;
        mGestureDetector = new GestureDetector(context, new SimpleOnGestureListener());
    }

    @Override
    public boolean onTouchEvent(final TextView widget, final Spannable buffer, final MotionEvent event) {

        mWidget = widget;
        mBuffer = buffer;
        mGestureDetector.onTouchEvent(event);

        return false;
    }

    /**
     * Detects various gestures and events.
     * Notify users when a particular motion event has occurred.
     */
    class SimpleOnGestureListener extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onDown(MotionEvent event) {
            // Notified when a tap occurs.
            return true;
        }

        @Override
        public void onLongPress(MotionEvent e) {
            // Notified when a long press occurs.
            final String text = mBuffer.toString();

            if (mListener != null) {
                Log.d(TAG, "----> Long Click Occurs on TextView with ID: " + mWidget.getId() + "\n" +
                                  "Text: " + text + "\n<----");

                mListener.onLongClick(text);
            }
        }

        @Override
        public boolean onSingleTapConfirmed(MotionEvent event) {
            // Notified when tap occurs.
            final String linkText = getLinkText(mWidget, mBuffer, event);

            LinkType linkType = LinkType.NONE;

            if (Patterns.PHONE.matcher(linkText).matches()) {
                linkType = LinkType.PHONE;
            }
            else if (Patterns.WEB_URL.matcher(linkText).matches()) {
                linkType = LinkType.WEB_URL;
            }
            else if (Patterns.EMAIL_ADDRESS.matcher(linkText).matches()) {
                linkType = LinkType.EMAIL_ADDRESS;
            }

            if (mListener != null) {
                Log.d(TAG, "----> Tap Occurs on TextView with ID: " + mWidget.getId() + "\n" +
                                  "Link Text: " + linkText + "\n" +
                                  "Link Type: " + linkType + "\n<----");

                mListener.onLinkClicked(linkText, linkType);
            }

            return false;
        }

        private String getLinkText(final TextView widget, final Spannable buffer, final MotionEvent event) {

            int x = (int) event.getX();
            int y = (int) event.getY();

            x -= widget.getTotalPaddingLeft();
            y -= widget.getTotalPaddingTop();

            x += widget.getScrollX();
            y += widget.getScrollY();

            Layout layout = widget.getLayout();
            int line = layout.getLineForVertical(y);
            int off = layout.getOffsetForHorizontal(line, x);

            ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);

            if (link.length != 0) {
                return buffer.subSequence(buffer.getSpanStart(link[0]),
                        buffer.getSpanEnd(link[0])).toString();
            }

            return "";
        }
    }
}

ব্যবহার

String str_links = "<a href='http://google.com'>Google</a><br /><a href='http://facebook.com'>Facebook</a>";
text_view.setText( Html.fromHtml( str_links ) );
text_view.setMovementMethod(new TextViewClickMovement(this, context));

লিংক

আশা করি এই হেল্পস! আপনি কোড খুঁজে পেতে পারেন এখানে


দয়া করে, আপনার কোডটি আবার লাইন থেকে দেখুন text_view.setMovementMethod(new TextViewClickMovement(this, context));; অ্যান্ড্রয়েড স্টুডিও অভিযোগ করছে যে contextএটি সমাধান করা যায়নি।
এক্স09

আপনি যদি বিটবাকেট থেকে উত্স কোডটি অনুলিপি করেন তবে আপনার প্রসঙ্গের স্থান এবং শ্রোতার এই পাঠ্য_ভিউ.সেটমোভমেন্টমেথোদ (নতুন পাঠ্যদর্শনক্লিকমোভমেন্ট (প্রসঙ্গ। এটি)) এর মতো পরিবর্তন করা উচিত;
ভিক্টর অপায়ান

এটি পরামিতিগুলির জন্য দুটি প্রসঙ্গকে বিশ্লেষণ করবে। স্যার কাজ করেন নি। যদিও গৃহীত উত্তরটি এখন আমার পক্ষে কাজ করছে
X09

আপনার জবাবের জন্য আপনাকে ধন্যবাদ স্যার, এই ধরণের জন্য সেরা একটি, ধন্যবাদ!
ভোলোভিক ভুকাসিন

8

নেটিভ লিংকাইফ লাইব্রেরি ব্যবহার করে একটি উপায় পরিষ্কার এবং আরও ভাল সমাধান ।

উদাহরণ:

Linkify.addLinks(mTextView, Linkify.ALL);

1
এটি ব্যবহার করে কোনও অন্লিক ইভেন্টকে ওভাররাইড করা সম্ভব?
মিলিণ্ড মেভাদা

6

আমি একটি সহজ এক্সটেনশনটি ফাংশন মধ্যে তৈরি Kotlin URLSpan উপাদানের একটি নতুন কলব্যাক প্রয়োগের দ্বারা একটি TextView মধ্যে ধরা URL লিঙ্ক ক্লিক করে।

স্ট্রিং.এক্সএমএল (পাঠ্যের উদাহরণের লিঙ্ক)

<string name="link_string">this is my link: <a href="https://www.google.com/">CLICK</a></string>

আপনি "হ্যান্ডেলআরলিক্লিক্স" কল করার আগে আপনার বিস্তৃত পাঠ্যটি টেক্সটভিউতে সেট করা আছে তা নিশ্চিত করুন Make

textView.text = getString(R.string.link_string)

এটি এক্সটেনশন ফাংশন:

/**
 * Searches for all URLSpans in current text replaces them with our own ClickableSpans
 * forwards clicks to provided function.
 */
fun TextView.handleUrlClicks(onClicked: ((String) -> Unit)? = null) {
    //create span builder and replaces current text with it
    text = SpannableStringBuilder.valueOf(text).apply {
        //search for all URL spans and replace all spans with our own clickable spans
        getSpans(0, length, URLSpan::class.java).forEach {
            //add new clickable span at the same position
            setSpan(
                object : ClickableSpan() {
                    override fun onClick(widget: View) {
                        onClicked?.invoke(it.url)
                    }
                },
                getSpanStart(it),
                getSpanEnd(it),
                Spanned.SPAN_INCLUSIVE_EXCLUSIVE
            )
            //remove old URLSpan
            removeSpan(it)
        }
    }
    //make sure movement method is set
    movementMethod = LinkMovementMethod.getInstance()
}

এইভাবেই আমি এটি ডাকি:

textView.handleUrlClicks { url ->
    Timber.d("click on found span: $url")
}

4

আপনি যদি কোটলিন ব্যবহার করছেন তবে আমি এই মামলার জন্য একটি সাধারণ এক্সটেনশন লিখেছি :

/**
 * Enables click support for a TextView from a [fullText] String, which one containing one or multiple URLs.
 * The [callback] will be called when a click is triggered.
 */
fun TextView.setTextWithLinkSupport(
    fullText: String,
    callback: (String) -> Unit
) {
    val spannable = SpannableString(fullText)
    val matcher = Patterns.WEB_URL.matcher(spannable)
    while (matcher.find()) {
        val url = spannable.toString().substring(matcher.start(), matcher.end())
        val urlSpan = object : URLSpan(fullText) {
            override fun onClick(widget: View) {
                callback(url)
            }
        }
        spannable.setSpan(urlSpan, matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
    }
    text = spannable
    movementMethod = LinkMovementMethod.getInstance() // Make link clickable
}

ব্যবহার:

yourTextView.setTextWithLinkSupport("click on me: https://www.google.fr") {
   Log.e("URL is $it")
}

1

একটি বিকল্প, imho উপায় সহজ পদ্ধতির (আমার মতো অলস বিকাশকারীদের জন্য;)

abstract class LinkAwareActivity : AppCompatActivity() {

    override fun startActivity(intent: Intent?) {
        if(Intent.ACTION_VIEW.equals(intent?.action) && onViewLink(intent?.data.toString(), intent)){
            return
        }

        super.startActivity(intent)
    }

    // return true to consume the link (meaning to NOT call super.startActivity(intent))
    abstract fun onViewLink(url: String?, intent: Intent?): Boolean 
}

প্রয়োজনে, আপনি পরিকল্পনাটির স্কিম / মাইমটাইপ পরীক্ষা করতে পারেন


0

আমি কেবল টেক্সটভিউ ব্যবহার করছি এবং ইউআরএল এবং হ্যান্ডেল ক্লিকের জন্য স্প্যান সেট করব।

আমি এখানে লিঙ্কিফাই ছাড়াই খুব মার্জিত সমাধান পেয়েছি - সেই অনুযায়ী আমি জানি যে স্ট্রিংয়ের কোন অংশটি আমি লিঙ্কাইফাই করতে চাই

আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে পাঠ্যদর্শন লিঙ্কটি ক্লিক করুন handle

কোটলিনে:

fun linkify(view: TextView, url: String, context: Context) {

    val text = view.text
    val string = text.toString()
    val span = ClickSpan(object : ClickSpan.OnClickListener {
        override fun onClick() {
            // handle your click
        }
    })

    val start = string.indexOf(url)
    val end = start + url.length
    if (start == -1) return

    if (text is Spannable) {
        text.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
        text.setSpan(ForegroundColorSpan(ContextCompat.getColor(context, R.color.orange)),
                start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
    } else {
        val s = SpannableString.valueOf(text)
        s.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
        s.setSpan(ForegroundColorSpan(ContextCompat.getColor(context, R.color.orange)),
                start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
        view.text = s
    }

    val m = view.movementMethod
    if (m == null || m !is LinkMovementMethod) {
        view.movementMethod = LinkMovementMethod.getInstance()
    }
}

class ClickSpan(private val mListener: OnClickListener) : ClickableSpan() {

    override fun onClick(widget: View) {
        mListener.onClick()
    }

    interface OnClickListener {
        fun onClick()
    }
}

এবং ব্যবহার: লিঙ্কাইফাই (আপনার টেক্সটভিউ, ইউআরল স্ট্রিং, প্রসঙ্গ)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.