web-dev-qa-db-ja.com

Android TextViewのURLのアクティブリンク

Webサービスから動的テキストを取得し、TextViewで同じテキストを表示しています。 TextViewには<a href="http://hello.com">hello</a>。次のコードを使用してテキストを設定しました。

textView.setText(Html.fromHtml(sampletext));

また、Android:autoLink="web"は、TextViewを含む対応するxmlにあります。現在、リンクは青色と下線で適切に表示されていますが、リンクが死んでいることがわかりました。クリックしようとしても何も起こりません。リンクをアクティブにするにはどうすればよいですか?

55
dev_android

すべてのソリューションを再検討した後、いくつかの説明を含む要約:

Android:autoLink="web" 

android:linksClickableが設定されていない場合でも、URLを見つけてリンクを作成します。リンクはデフォルトでクリック可能です。 URLを単独で保持する必要はありません。テキストの途中であっても検出されてクリック可能になります。

<TextView
    Android:text="My web site: www.stackoverflow.com"
    Android:id="@+id/TextView1"
    Android:layout_height="wrap_content" 
    Android:layout_width="wrap_content"
    Android:autoLink="web">
</TextView>

コードを使用してリンクを設定するには、同じ原理で、レイアウトにパターンやAndroid:autoLinkは必要ありません。Linkifyを使用してリンクが自動的に検出されます。

  final TextView myClickableUrl = (TextView) findViewById(R.id.myClickableUrlTextView);
  myClickableUrl.setText("Click my web site: www.stackoverflow.com");
  Linkify.addLinks(myClickableUrl, Linkify.WEB_URLS);
141
L. G.

これは私のために働く:

<TextView
    Android:text="www.hello.com"
    Android:id="@+id/TextView01"
    Android:layout_height="wrap_content" 
    Android:layout_width="fill_parent"
    Android:autoLink="web">
</TextView>
36

いつでも節約するには、真の解決策は

    <TextView
    Android:text="www.hello.com"
    Android:id="@+id/TextView01"
    Android:layout_height="wrap_content" 
    Android:layout_width="fill_parent"
    Android:autoLink="web"
    Android:linksClickable="true">
</TextView>

そして私はそれを使用し、それは完璧に動作します

14
M.Ali El-Sayed

2つのケースがあります。

  • テキストは"click on http://www.hello.com"

テキストでリンクが自動的に検出されるように、xmlでautoLink属性を設定する必要があります。

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:autoLink="web"
    Android:text="click on http://www.hello.com"/>
  • テキストはclick on <a href="http://hello.com">hello</a>

次に、コードでそれを実行し、テキストがhtmlであることを伝え、クリックのリンク移動方法を指定する必要があります。

    String text = "click on <a href=\"http://hello.com\">hello</a>";
    TextView textView = view.findViewById(R.id.textView);
    textView.setText(Html.fromHtml(text));
    textView.setMovementMethod(LinkMovementMethod.getInstance());
6
Arnaud SmartFun

このアプローチをチェックしてください:

String text = "Visit stackoverflow.com";
TextView label = new TextView(this);
label.setText(text);
Pattern pattern = Pattern.compile("stackoverflow.com");
Linkify.addLinks(label, pattern, "http://");
5
Sherif elKhatib

私はそれを見つけたいくつかのアイデアを与えました

TextView tv = ( TextView ) findViewById( R.id.link );  
    WebView wv = ( WebView ) findViewById( R.id.webView );  
    URLSpan[] urlSpans = tv.getUrls();  
    for ( URLSpan urlSpan : urlSpans )  
    {  
        wv.loadUrl( urlSpan.getURL() );  
    }  

string.xml

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
  <string name="app_name">Hello, Android</string>  
  <string name="link">'<a href="http://www.google.com" rel="nofollow">Google</a>'</string>  
</resources> 

main.xml

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
        xmlns:Android="http://schemas.Android.com/apk/res/Android"  
        Android:orientation="vertical"  
        Android:layout_width="fill_parent"  
        Android:layout_height="fill_parent"  
        >  

  <TextView  
          Android:id="@+id/link"  
          Android:layout_width="wrap_content"  
          Android:layout_height="wrap_content"  
          Android:autoLink="all"  
          Android:linksClickable="true"  
          Android:text="@string/link" />  

  <WebView  
          Android:id="@+id/webView"  
          Android:layout_width="fill_parent"  
          Android:layout_height="wrap_content"  
          Android:layout_weight="1.0" />  

</LinearLayout>  
3
Pratik

XMLで、Android:linksClickable="true"をTextViewに追加する必要があります。

2
LuxuryMode

これを試してください https://saket.me/better-url-handler-textview-Android/

それは非常に良い解決策であり、簡単です

1
SAndroidD

Answer は正しいですが、完全ではありません。autoLinkやlinksClickableのような他の回答のプロパティが機能していなかったためです。また、文字列リソースからhtmlで文字列を渡すときも機能しませんでした。そのため、xmlをクリーンアップし、その答えとまったく同じように文字列を直接渡す必要があります。

    String text = "click on <a href=\"http://hello.com\">hello</a>";
    TextView textView = view.findViewById(R.id.textView);
    textView.setText(Html.fromHtml(text));
    textView.setMovementMethod(LinkMovementMethod.getInstance());

LinkMovementMethodなしでは試しませんでしたが、ようやく機能するようになったので大丈夫です。他の回答は私にとってはうまくいかなかったか、リンクとしてクリック可能なテキストではなく、表示可能なURLテキストに対するものでした。

0
Renetik

これらのコード行をtextViewファイルのxmlに追加すると、問題なく動作します。

Android:autoLink="web" Android:textColorLink="@Android:color/holo_orange_dark" Android:linksClickable="true"

または、textviewに独自のリンクが必要な場合は、Javaファイルにこれらのコード行を追加します

  final SpannableString s = new SpannableString("https://play.google.com/store/apps/details?id=cn.wps.moffice_eng");
  Linkify.addLinks(s, Linkify.ALL);

関数によってTextViewにこの 's'文字列を設定します

Textview.setText(s);

この行を追加することを忘れないでください

 ((TextView)findViewById(Android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());

idはtextview idになります

楽しい ...

0
Tarun Grover

Textviewにstrings.xmlの文字列を表示する場合、Webリンクを含む文字列にはWord "a href ="を含めないでください。これらの単語がstrings.xmlファイルから削除された場合、リンクは機能します。

0
Dharam Jindal