رفتن به مطلب

ایجاد لینک همراه با متن در TextView


ارسال های توصیه شده

سلام

دوستان اینجام  میخوام آموزشی  بدم  که  میتونه  خیلی کاربرد داشته باشه

شاید در برخی مواقعه دیده باشید که برخی از برنامه ها همراه  با متن معمولی لینک قرار میدن اینجا میخوام آموزش  بدم که چطور این کار رو میشه انجام داد.

برای این کار ما از کتاب خانه Linkify استفاده میکنیم

میتونید مستندات کاملش  رو از ادرس  زیر مطالعه کنید.

https://developer.android.com/reference/android/text/util/Linkify.html

خوب ما اول باید یک pattern  ایجادکنیم کار این pattern  چی هستش  ما میایم متنی رو که میخوایم لینک دار کنیم رو به این pattern  میدیم

Pattern pattern= Pattern.compile("جواد زبیدی زاده");

خب حالا اگر ما بخوایم لینک به وسیله scheme خود برنامه خودمون باز بشه یا به وسیله هر برنامه دیگه میاد متنی رو که داخل pattern  نوشتیم رو ارسال میکنه اگر بخوایم متن دلخواهی بفرستیم میاید از خاصیت TransformFilter   استفاده  میکنیم به مثل زیر توجه کنید

مثال : اگر عنوان لینک نام و نام خانوادگی کاربر باشه (جواد زبیدی زاده)   و بخوایم نام کاربری  رو بفرستیم  (Javadzobeidi) میایم به صورت زیر انجام میدیم

Linkify.TransformFilter username = new Linkify.TransformFilter() {
                @Override public String transformUrl(Matcher match, String url) {
                    return "javadzobeidi";
                }
            };

حالا باید ویوی که متن توی اون هستش رو هم تعریف کنیم که اینجا Textview هستش

TextView event_message = (TextView)itemView.findViewById(R.id.event_message);

event_message.setText("جواد زبیدی زاده یک پیغامی برای شما ارسال کرده است");

خب حالا وقتش  شده لینک رو ایجاد کنیم  گفتیم از کلاس Linkify  استفاده میکنیم

Linkify.addLinks(event_message,pattern,"myScheme://?username=",null,username);

توی کد بالا اگر توجه کنید من یک  scheme ایجاد کردم myScheme://?username=

این scheme  هستش که من با اون اطلاعات رو میگیرم

خب اگر تا اینجا  درست انجام داده باشید  لینک همراه با متن نمایش داده میشه  ولی خب یک زیر خط همراه لینک به نمایش در میاد که بهش میگن  Underlines برای حذف این زیر خط باید کلاس و تابع زیر رو بنویسید

/**
     * Delete Under Line From Link in Text View Class
     */
    public static class URLSpanNoUnderline extends URLSpan {
        public URLSpanNoUnderline(String p_Url) {
            super(p_Url);
        }

        public void updateDrawState(TextPaint p_DrawState) {
            super.updateDrawState(p_DrawState);
            p_DrawState.setUnderlineText(false);
        }
    }

    /**
     * Delete Under Line From Link in Text View method
     * Enterd Text View Get text
     */
    public static void removeUnderlines(Spannable p_Text) {
        URLSpan[] spans = p_Text.getSpans(0, p_Text.length(), URLSpan.class);

        for(URLSpan span:spans) {
            int start = p_Text.getSpanStart(span);
            int end = p_Text.getSpanEnd(span);
            p_Text.removeSpan(span);
            span = new URLSpanNoUnderline(span.getURL());
            p_Text.setSpan(span, start, end, 0);
        }
    }

و کد زیر رو کنار کد ایجاد لینک قرار بدید

// Make sure the TextView was instantiated correctly
            if(event_message != null) {
                removeUnderlines((Spannable)event_message.getText());
            }

 

 

و من الله التوفیق

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...