テキストビューにリンクを配置すると機能することを知っていますが、たとえば表示したい場合は:
google StackOverflow
リンク全体ではなく(タグのみ)リンクをクリック可能にするにはどうすればよいですか?
2つの個別のTextViewを用意し、必要に応じてレイアウトに合わせて配置できます。
Text1.setText(
Html.fromHtml(
"<a href=\"http://www.google.com\">google</a> "));
Text1.setMovementMethod(LinkMovementMethod.getInstance());
Text2.setText(
Html.fromHtml(
"<a href=\"http://www.stackoverflow.com\">stackoverflow</a> "));
Text2.setMovementMethod(LinkMovementMethod.getInstance());
次に、「リンク下線」を削除する場合。クラスを作成します。
public class URLSpanNoUnderline extends URLSpan {
public URLSpanNoUnderline(String url) {
super(url);
}
@Override public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}
次に、TextViewがあるメインActivityクラスにこのメソッドを追加します
private void stripUnderlines(TextView textView) {
Spannable s = new SpannableString(textView.getText());
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span: spans) {
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
s.removeSpan(span);
span = new URLSpanNoUnderline(span.getURL());
s.setSpan(span, start, end, 0);
}
textView.setText(s);
}
そして、onViewでTextViewsを初期化した後、これを呼び出します。
stripUnderlines(Text1);
stripUnderlines(Text2);
TextView t2 = (TextView) findViewById(R.id.textviewidname);
t2.setMovementMethod(LinkMovementMethod.getInstance());
そして
<string name="google_stackoverflow"><a href="https://stackoverflow.com/questions/9852184/Android-textview-hyperlink?rq=1">google stack overflow</a></string>
リンクは、「 Android:textview hyperlink "
タグは「google stack overflow」です
Javaで最初のコードブロックを、strings.xmlファイルで2番目のコードブロックを定義します。また、JavaのページレイアウトからtextViewのIDを参照するようにしてください。
Android:autoLink="web"
は、HTMLに完全なリンクがある場合にのみ機能します。以下が青色で強調表示され、クリック可能になります。
これを行う非常に簡単な方法---
あなたの活動で-
TextView tv = (TextView) findViewById(R.id.site);
tv.setText(Html.fromHtml("<a href=http://www.stackoverflow.com> STACK OVERFLOW "));
tv.setMovementMethod(LinkMovementMethod.getInstance());
次に、リンク全体ではなく、タグのみを取得します。
それがあなたを助けることを願っています...
これは動作するはずです。
TextView t2 = (TextView) findViewById(R.id.text2);
t2.setMovementMethod(LinkMovementMethod.getInstance());
and
<TextView Android:layout_width="wrap_content"
Android:layout_height="wrap_content" Android:text="@string/txtCredits"
Android:id="@+id/text2"
Android:layout_centerInParent="true"
Android:layout_marginTop="20dp"></TextView>
私は同じ問題にぶつかり、最終的に有効な解決策を見つけました。
string.xmlファイルで、次を定義します。
<string name="textWithHtml">The URL link is <a href="http://www.google.com">Google</a></string>
「<」より小さい文字をHTMLエスケープ文字に置き換えます。
In Java code:
String text = v.getContext().getString(R.string.textWithHtml);
textView.setText(Html.fromHtml(text));
textView.setMovementMethod(LinkMovementMethod.getInstance());
そして、TextBoxは、クリック可能なアンカーリンク付きのテキストを正しく表示します
これは私の作業実装です
private void showMessage()
{
lblMessage.setText("");
List<String> messages = db.getAllGCMMessages();
for (int k = messages.size() - 1; k >= 0; --k)
{
String message = messages.get(k).toString();
lblMessage.append(message + "\n\n");
}
Linkify.addLinks(lblMessage, Linkify.ALL);
}
ハイパーリンクの色を変更するには、textviewのxmlを編集しました-
Android:textColorLink="#69463d"
データバインディングについてはどうですか?
@JvmStatic
@BindingAdapter("textHtml")
fun setHtml(textView: TextView, resource: String) {
val html: Spanned = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(resource, Html.FROM_HTML_MODE_COMPACT)
} else {
Html.fromHtml(resource)
}
textView.movementMethod = LinkMovementMethod.getInstance()
textView.text = html
}
strings.xml
<string name="text_with_link"><a href=%2$s>%1$s</a> </string>
あなたのlayout.xmlで
<TextView
Android:id="@+id/title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:textHtml="@{@string/text_with_link(model.title, model.url)}"
tools:text="Some text" />
Xmlのタイトルとリンクは単純な文字列です
また、データバインディングアダプターに複数の引数を渡すことができます
@JvmStatic
@BindingAdapter(value = ["textLink", "link"], requireAll = true)
fun setHtml(textView: TextView, textLink: String?, link: String?) {
val resource = String.format(textView.context.getString(R.string.text_with_link, textLink, link))
val html: Spanned = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(resource, Html.FROM_HTML_MODE_COMPACT)
} else {
Html.fromHtml(resource)
}
textView.movementMethod = LinkMovementMethod.getInstance()
textView.text = html
}
および.xmlで引数を個別に渡します
<TextView
Android:id="@+id/title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:link="@{model.url}"
app:textLink="@{model.title}"
tools:text="Some text" />
つかいます
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:autoLink="web"
Android:text="www.google.com" />
このフラグ
autolink = "web"
uRLなどのリンクが自動的に検出され、クリック可能なリンクに変換されるかどうかを制御します。デフォルト値は「なし」で、この機能は無効になっています。値:all、email、map、none、phone、web。