TextViewを動的に作成し、テキストをリンク可能に設定したいと考えています。テキスト値は " Google "です。私はインターネットとブログを参照しました これのように は同じように表示されますが、期待した結果を出すことができませんでした。
さまざまな方法を試しましたが、表示される出力はテキスト全体を含むテキスト全体です。私が試したコードは次のとおりです:
TextView tv1 = new TextView(this);
tv1.setLayoutParams(textOutLayoutParams);
// Make Linkable
tv1.setMovementMethod(LinkMovementMethod.getInstance());
tv1.setText(Html.fromHtml(l.getLeftString()));
/*SpannableString s = new SpannableString(l.getLeftString());
Linkify.addLinks(s, Linkify.WEB_URLS);
tv1.setText(s);
tv1.setMovementMethod(LinkMovementMethod.getInstance());
*/
dialogLayout.addView(tv1);
出力に「 Google 」が表示され、リンクは表示されません。私もCleanプロジェクトを試して、もう一度ビルドしてみましたが、成功しませんでした。 "Google"だけが青い色で下線付き(デフォルト)として表示され、Googleをクリックすると、ブラウザが http://google.com で開きます。
出力を取得するためのコードに欠けているものは何ですか?ちなみにREF:64ビットのWindows 7、Java、Eclipseを使用していますAndroid API 8-2.2
どんな助けでも大歓迎です。
私は最終的に次のコードを使用してそれを動作させました:
TextView tv1 = new TextView(this);
tv1.setLayoutParams(textOutLayoutParams);
tv1.setText(Html.fromHtml("<a href=\""+ l.getRightString() + "\">" + l.getLeftString() + "</a>"));
tv1.setClickable(true);
tv1.setMovementMethod (LinkMovementMethod.getInstance());
dialogLayout.addView(tv1);
l.getRightString()-http:\ www.google.comなどのURLが含まれますl.getLeftString()-「Googleに移動」などのURLのテキストが含まれます
結果:ダイアログに「Go to Google」と青色で下線が引かれているテキストをクリックすると、ブラウザが開いてそれぞれのページが表示されます。ブラウザーを返す/終了すると、離れた状態から再びアプリに戻ります。
お役に立てれば。
HTMLを文字列に保存します
<string name="link"><a href="http://www.google.com">Google</a></string>
テキストビューIDをに設定
textViewLinkable
メインアクティビティでは、次のコードを使用します。
((TextView) findViewById(R.id.textViewLinkable)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.textViewLinkable)).setText(Html.fromHtml(getResources().getString(R.string.link)));
Android N.
String termsText = "By registering, you are agree to our";
String termsLink = " <a href=https://www.yourdomain.com/terms-conditions.html >Terms of Service</a>";
String privacyLink = " and our <a href=https://www.yourdomain.com/privacy-policy.html >Privacy Policy</a>";
String allText = termsText + termsLink + privacyLink;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
((TextView) findViewById(R.id.text_terms_conditions)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.text_terms_conditions)).setText(Html.fromHtml(allText, Html.FROM_HTML_MODE_LEGACY));
}
else {
((TextView) findViewById(R.id.text_terms_conditions)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.text_terms_conditions)).setText(Html.fromHtml(allText));
}
私は以下を使用して解決した同じ問題にも直面していました
String str_text = "<a href=http://www.google.com >Google</a>";
TextView link;
link = (TextView) findViewById(R.id.link);
link.setMovementMethod(LinkMovementMethod.getInstance());
link.setText(Html.fromHtml(str_text));
リンクの色を青に変更するため
link.setLinkTextColor(Color.BLUE);
txtview.setMovementMethod(LinkMovementMethod.getInstance());
このステートメントをテキストビューに渡し、string.xmlで文字列を次のように設定します
<string name="txtCredits"> <a href="http://www.google.com"></a></string>
この文字列名 "Android:text =" @ string/txtCredits "を、txtviewが存在するxmlクラスに渡します。
このコードを使用してください autolink-Java On GitHub
このような
private String getLink(String string){
LinkExtractor linkExtractor = LinkExtractor.builder()
.linkTypes(EnumSet.of(LinkType.URL)) // limit to URLs
.build();
Iterable<Span> spans = linkExtractor.extractSpans(string);
StringBuilder sb = new StringBuilder();
for (Span span : spans) {
String text = string.substring(span.getBeginIndex(), span.getEndIndex());
if (span instanceof LinkSpan) {
// span is a URL
sb.append("<a href=\"");
sb.append(text);
sb.append("\">");
sb.append(text);
sb.append("</a>");
} else {
// span is plain text before/after link
sb.append(text);
}
}
return sb.toString(); // "wow <a href=\"http://test.com\">http://test.com</a> such linked"
}