android - কিভাবে আমি একটি TextView ক্লিকযোগ্য লিঙ্ক লিঙ্ক করতে পারি?




hyperlink android-textview (20)

API ডেমোতে বরিড আমি আমার সমস্যার সমাধান খুঁজে পেয়েছি:

Link.java:

    // text2 has links specified by putting <a> tags in the string
    // resource.  By default these links will appear but not
    // respond to user input.  To make them active, you need to
    // call setMovementMethod() on the TextView object.

    TextView t2 = (TextView) findViewById(R.id.text2);
    t2.setMovementMethod(LinkMovementMethod.getInstance());

ডেমোতে যা ছিল তা মিলতে আমি আমার পাঠ্য ভিউয়ের বেশিরভাগ গুণাবলী মুছে ফেলেছি।

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/txtCredits"/>

যে এটা সমাধান। আবরণ উন্মোচন এবং ঠিক করা কঠিন।

গুরুত্বপূর্ণ : আপনি setMovementMethod() কে কল করলে autoLink="web" মুছে ফেলতে ভুলবেন না।

আমি নিম্নলিখিত TextView সংজ্ঞায়িত আছে:

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:text="@string/txtCredits"
    android:autoLink="web" android:id="@+id/infoTxtCredits"
    android:layout_centerInParent="true"
    android:linksClickable="true"></TextView>

যেখানে @string/txtCredits একটি স্ট্রিং রিসোর্স রয়েছে যা <a href="some site">Link text</a> ধারণ করে।

অ্যানড্রইড টেক্সট ভিউ লিঙ্কগুলি হাইলাইট করা হয়, কিন্তু তারা ক্লিক প্রতিক্রিয়া না। কেউ কি আমাকে ভুল বলতে পারে? পাঠ্যক্রমের জন্য একটি অনক্লিকলিস্টারটি কি আমার কার্যকলাপে এইরকম সহজ হিসাবে সেট করতে হবে?

আমি আমার স্ট্রিং রিসোর্স সংজ্ঞায়িত উপায় সঙ্গে কি আছে মনে হচ্ছে। এটা কাজ করে না:

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>

কিন্তু এই আছে:

<string name="txtCredits">www.google.com</string>

যা একটি বামার কারণ আমি সম্পূর্ণ ইউআরএল দেখানোর চেয়ে বরং একটি টেক্সট লিঙ্ক প্রদর্শন করবে।


Autolink ফোন আমার জন্য কাজ করে না। নিম্নলিখিত একটি কবজ মত কাজ,

TextView tv = (TextView) findViewById(R.id.emergencynos);
String html2="<br><br>Fire - <b><a href=tel:997>997</a> </b></br></br>";        
tv.append(Html.fromHtml(html2));
tv.setMovementMethod(LinkMovementMethod.getInstance());

আপনার স্ট্রিং সম্পদ সিডিএটিএ যোগ করুন

strings.xml

<string name="txtCredits"><![CDATA[<a href=\"http://www.google.com\">Google</a>]]></string>

আপনি GetString (R.string.whatever) এর পরিবর্তে getText (R.string.whatever) ব্যবহার করতে হবে তা চিন্তা করার জন্য এত সময় অপচয় হয়েছে ...

যাইহোক, এখানে আমি আমার কাজ পেয়েছিলাম কিভাবে। একই টেক্সট ভিউ একাধিক হাইপারলিঙ্ক সঙ্গে।

    TextView termsTextView = (TextView) getActivity().findViewById(R.id.termsTextView);
    termsTextView.append("By registering your account, you agree to our ");
    termsTextView.append(getText(R.string.terms_of_service));
    termsTextView.append(", ");
    termsTextView.append(getText(R.string.fees));
    termsTextView.append(", and the ");
    termsTextView.append(getText(R.string.stripe_connected_account_agreement));

    termsTextView.setMovementMethod(LinkMovementMethod.getInstance());



            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/termsTextView"/>

স্ট্রিং উদাহরণ

    <string name="stripe_connected_account_agreement"><a href="https://stripe.com/connect/account-terms">Stripe Connected Account Agreement</a></string>

আপনি শুধুমাত্র এই প্রয়োজন:

android:autoLink="web"

TextView এ এই লাইনটি সন্নিবেশ করান, যা ওয়েবে রেফারেন্সের সাথে ক্লিকযোগ্য হতে পারে। ইউআরএল ঠিকানা এই TextView একটি টেক্সট হিসাবে সেট।

উদাহরণ:

 <TextView
    android:id="@+id/textViewWikiURL"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textStyle="bold"
    android:text="http://www.wikipedia.org/"
    android:autoLink="web" />

আমার জন্য কাজ করা সবচেয়ে সহজ জিনিস here ব্যবহার করা here

TextView txt_Message = (TextView) view.findViewById(R.id.txt_message);
txt_Message.setText("This is link https://www.google.co.in/");
Linkify.addLinks(txt_Message, Linkify.WEB_URLS);

এবং এটি স্বয়ংক্রিয়ভাবে পাঠ্যবইয়ের পাঠ্য থেকে ওয়েব url সনাক্ত করবে।


আমি android:autoLink="web" ব্যবহার করে লক্ষ্য করেছি android:autoLink="web" এইভাবে

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:autoLink="web"/>

ইউআরএলগুলির জন্য ঠিক আছে কাজ করেছে কিন্তু যেহেতু আমার কাছে একটি ইমেল ঠিকানা এবং ফোন নম্বর ছিল যা আমি লিঙ্ক করতে চেয়েছিলাম তাই আমি এই লাইনটি ব্যবহার করে শেষ করেছি android:autoLink="all"

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:autoLink="all"/>

এবং এটি একটি কবজ মত কাজ।


আমি অটোলিঙ্কটিকে "স্বয়ংক্রিয় আন্ডারলাইনে" পাঠাতে ব্যবহার করি, কিন্তু এটি পরিচালনা করে এমন একটি "অন ক্লিক" তৈরি করে। (আমি নিজেকে এই সমস্যা মধ্যে দৌড়ে)

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:textSize="18dp"
            android:autoLink="all"
            android:text="@string/twitter"
            android:onClick="twitter"/>

public void twitter (View view)
    {
        try
        {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://twitter.com/onaclovtech"));
            startActivity(browserIntent);

        }
        finally
        {
        }
    }

কোনও অনুমতির প্রয়োজন নেই, কারণ আপনি সেই সংস্থানগুলি পরিচালনা করে এমন অ্যাপ্লিকেশানগুলি বন্ধ করে দিচ্ছেন, (IE ব্রাউজার)।

এই আমার জন্য কাজ কি ছিল। গুড লাক।


আমি শুধুমাত্র android:autoLink="web" ব্যবহার করছি android:autoLink="web" এবং এটি জরিমানা কাজ করে। লিঙ্কে একটি ক্লিক ব্রাউজার খোলে এবং সঠিক পৃষ্ঠা দেখায়।

এক জিনিস আমি অনুমান করতে পারি যে অন্য কিছু দেখুন লিঙ্কের উপরে। স্বচ্ছ কিছু এমন যা পুরো পিতাকে পূরণ করে তবে লিঙ্কটির উপরে কিছু প্রদর্শন করে না। এই ক্ষেত্রে ক্লিক লিঙ্ক পরিবর্তে এই ভিউ যায়।


উপরের সমাধানগুলি আমার জন্য কাজ করে নি, তবে নিম্নলিখিতটি করেছে (এবং এটি একটু ক্লিনার বলে মনে হচ্ছে)।
প্রথমত, স্ট্রিং রিসোর্সে এইচটিএমএল সত্তা এনকোডিং ব্যবহার করে আপনার ট্যাগ খোলার শেভ্রন সংজ্ঞায়িত করুন, যেমন:

&lt;a href="http://www.google.com">Google&lt;/a>

এবং না:

<a href="http://www.google.com">Google</a>

সাধারণভাবে, স্ট্রিং এ সমস্ত শেভ্রন এনকোড করুন। বিটিডব্লিউ, লিঙ্ক http:// দিয়ে শুরু করতে হবে

তারপরে ( here প্রস্তাবিত হিসাবে) আপনার পাঠ্য ভিউতে এই বিকল্পটি সেট করুন:

 android:linksClickable="true"

অবশেষে, কোডে, করবেন:

((TextView) findViewById(R.id.your_text_view)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.your_text_view)).setText(Html.fromHtml(getResources().getString(R.string.string_with_links)));

যে এটি, কোন regexes বা অন্য ম্যানুয়াল হ্যাক প্রয়োজন।


এইভাবে আমি একটি পাঠ্য ভিউতে ক্লিকযোগ্য এবং দৃশ্যমান লিঙ্কগুলি সমাধান করে (কোড দ্বারা)

private void setAsLink(TextView view, String url){
        Pattern pattern = Pattern.compile(url);
        Linkify.addLinks(view, pattern, "http://");
        view.setText(Html.fromHtml("<a href='http://"+url+"'>http://"+url+"</a>"));
    }

এক্সএমএল ভিত্তিক TextView ব্যবহার করে, আপনার প্রয়োজনের জন্য আপনাকে কেবল দুটি জিনিস করতে হবে:

  1. স্ট্রিংতে আপনার লিঙ্ক সনাক্ত করুন, যেমন "এটি আমার ওয়েবপ্যাজ।" আপনি এটি এক্সএমএল বা কোডে যোগ করতে পারেন।

  2. XML ভিউটিতে টেক্সট ভিউ রয়েছে, এগুলি যোগ করুন:


android:linksClickable="true"

android:autoLink="web"

এটা ব্যবহার কর...

TextView.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/"));
                        startActivity(in);
                    }

                });

এবং ম্যানিফেস্ট ফাইল অনুমতি যোগ করুন

<uses-permission android:name="android.permission.INTERNET"/>

গ্রহণযোগ্য উত্তরটি সঠিক, তবে এর অর্থ হ'ল ফোন নম্বর, মানচিত্র, ইমেল ঠিকানা এবং নিয়মিত লিঙ্কগুলি যেমন http://google.com ট্যাগগুলি ছাড়াই http://google.com যাবে না কারণ আপনি XML এ অটলিং করতে পারবেন না।

আমি পাওয়া যায় যে ক্লিকযোগ্য সবকিছু আছে একমাত্র সম্পূর্ণ সমাধান নিম্নলিখিত:

Spanned text = Html.fromHtml(myString);
URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);
SpannableString buffer = new SpannableString(text);
Linkify.addLinks(buffer, Linkify.ALL);
for (URLSpan span : currentSpans) {
    int end = text.getSpanEnd(span);
    int start = text.getSpanStart(span);
    buffer.setSpan(span, start, end, 0);
}
textView.setText(buffer);
textView.setMovementMethod(LinkMovementMethod.getInstance());

এবং TextView android:autolink না থাকা উচিত android:autolinkandroid:linksClickable="true" জন্য কোন প্রয়োজন নেই android:linksClickable="true" হয়; এটা ডিফল্ট দ্বারা সত্য।


নীচের যে কেউ যে কোনও Android অ্যাপের মধ্যে পাঠ্য এবং হাইপারলিঙ্কের সংমিশ্রণের জন্য সন্ধান করতে পারে তার জন্য কাজ করা উচিত।

string.xml :

<string name="applink">Looking for the regular Zesteve App? 
<a href="https://play.google.com/store/apps/details?id=zesteve.com.myapplication">Get it here</a>
</string>

এখন আপনি যেকোনো প্রদত্ত View মধ্যে এই string ব্যবহার করতে পারেন:

<TextView
    android:id="@+id/getapp"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center"
    android:textColor="@color/main_color_grey_600"
    android:textSize="15sp"
    android:text="@string/applink"/>

এখন, আপনার কার্যকলাপ বা ফাটল মধ্যে, নিম্নলিখিত কাজ করুন:

TextView getapp =(TextView) findViewById(R.id.getapp);
getapp.setMovementMethod(LinkMovementMethod.getInstance());

এখন পর্যন্ত, আপনি android:autoLink="web" সেট করার প্রয়োজন নেই android:autoLink="web" বা android:linksClickable="true" এই পদ্ধতিটি ব্যবহার করে।

আমি আপনাকে এই সহায়ক খুঁজে পেতে আশা করি।


রিচার্ড, পরের বার, আপনাকে এই কোডটিকে পাঠ্য ভিউয়ের পরিবর্তে XML এ লেআউট এ যুক্ত করতে হবে।

android:autoLink="all"

এই এই মত হওয়া উচিত।

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="@string/txtCredits"
    android:id="@+id/infoTxtCredits"
    android:autoLink="all"
    android:linksClickable="true">
</TextView>

আপনি এই কোডটি ব্যবহার করতে হবে না ( t2.setMovementMethod(LinkMovementMethod.getInstance()); ) লিঙ্ক ক্লিকযোগ্য করতে।

এছাড়াও, এখানে সত্যটি রয়েছে: যতক্ষণ আপনি অটোলিঙ্ক এবং লিঙ্কগুলিকে সেট করেন, স্ট্রিং.এক্সএমএল ফাইলে এটি যুক্ত করতে ভুলবেন না যাতে ক্লিকযোগ্য লিঙ্কটি কাজ করবে।

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>

সমস্যাটির কারণ হচ্ছে এটি কেবল "নগ্ন" ঠিকানাগুলির সাথে মেলে ধরার চেষ্টা করে। "www.google.com" বা " http://www.google.com " এর মত জিনিস।

Html.fromHtml() মাধ্যমে আপনার পাঠ্য চালনা করা উচিত কৌশল। আপনি এটি প্রোগ্রামিক্যালি করতে হবে, কিন্তু এটি কাজ করে।


[Tested in Pre-lollipop as well as in Lollipop and above]

আপনি ব্যাকএন্ড থেকে বা আপনার সংস্থান ফাইল থেকে আপনার এইচটিএমএল স্ট্রিং পেতে পারেন। আপনি যদি আপনার পাঠ্য সংস্থান স্ট্রিং হিসাবে রাখেন, তবে CDATA ট্যাগ যুক্ত করতে ভুলবেন না:

<string name="your_text">![CDATA[...<a href="your_link">Link Title</a>  ...]]</string>

তারপরে কোডটিতে আপনাকে স্ট্রিংটি পেতে এবং এটি HTML হিসাবে নির্দিষ্ট করতে হবে এবং একটি লিঙ্ক আন্দোলন পদ্ধতি সেট করতে হবে:

String yourText = getString(R.string.your_text);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   textView.setText(Html.fromHtml(yourText, Html.FROM_HTML_MODE_COMPACT));
} else {
   textView.setText(Html.fromHtml(yourText));
}

try {
   subtext.setMovementMethod(LinkMovementMethod.getInstance());
} catch (Exception e) {
   //This code seems to crash in some Samsung devices.
   //You can handle this edge case base on your needs.
}

linkify ব্যবহার করে: লিংকাইফ টেক্সট এবং নিয়মিত অভিব্যক্তিটি টুকরো টুকরো করে নেয় এবং টেক্সটের সব রেজেক্স মিলকে ক্লিকযোগ্য লিঙ্কগুলিতে পরিণত করে

TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("http://www.domain.com");
Linkify.addLinks(textView, Linkify.WEB_URLS);

ভুলবেন না

import android.widget.TextView;

Linkify টেক্সট রঙ এছাড়াও পরিচালনা করুন

tv_customer_care_no.setLinkTextColor(getResources().getColor(R.color.blue));
  tv_customer_care_no.setText("For us to reach out to you, please fill the details below or contact our customer care at  18004190899 or visit our website http://www.dupont.co.in/corporate-links/contact-dupont.html ");
   Linkify.addLinks(tv_customer_care_no, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);
   Linkify.addLinks(tv_customer_care_no, Linkify.ALL );




clickable