文字列「このリンク」に下線を引いてクリックできるようにしたいのですが、それを実現する方法がわかりません。
XMLファイル:
<string name="submitText">Before you submit, please check out <u>this link</u></string>
私の断片では:
tvSubmit.setText(Html.fromHtml(getString(R.string.submitText)));
文字列全体をクリック可能にしたくはありません。下線付きのセクションのみを表示します。 2つのセルで水平方向のLinearLayout
を使用することはできません。小さいデバイスでは、文字列の外観が継続せず、2つのセルに分割されるためです。
私は何を試しましたか:
tvSubmit.setMovementMethod(LinkMovementMethod.getInstance());
Spannable sp = (Spannable) tvSubmit.getText();
ClickableSpan click = new ClickableSpan() {
@Override
public void onClick(View widget) {
showLink();
}
};
sp.setSpan(click, 0, sp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
上記のコードでは、文字列全体に下線が引かれ、テキストの色も水色に変更されます。
問題は、スパンを文字列全体に設定していることです(sp.setSpan(click, 0, sp.length()
)。修正するには、_this link
_でのみクリック可能なスパンを設定する必要があります。私はこのように同じことをしました:
_<string name="submitText">Before you submit, please check out %1$s</string>
<string name="this_link">this link</string>
_
あなたの活動で
_String thisLink = getString(R.string.thisLink);
String yourString = getString(R.string.submitText, thisLink);
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(yourString);
spannableStringBuilder.setSpan(click,
startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
_
ここで、startIndexとendIndexは、thisLink
内のyourString
のインデックスです。特に翻訳を処理する必要がある場合は、インデックスを探すのが簡単だったので、2つの文字列を分離しました。 startIndexを計算するには、yourString.indexOf(thisLink)
を使用でき、endIndexは_startIndex + the length of thisLink
_です。通常のチェック(負のインデックス、およびIndexOutBoundException
を引き起こす可能性のあるその他すべて)はお任せします
あなたはあなたのstrings.xmlで定義することができます
<string name="submitText">Before you submit, please check out <a href="actual url">this link</a>
<TextView
Android:id="@+id/tvSubmit"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentTop="true"
Android:autoLink=@String/submitText //link the content of web
Android:textColorLink="#576586" //change the color of the link
Android:textColor="#555555" />
アクティビティ中//サンプル
String webLinkText = <a href="https://prativas.files.wordpress.com/2013/05/screenshot-mozilla-firefox-private-browsing.png"><img src="https://prativas.files.wordpress.com/2013/05/screenshot-mozilla-firefox-private-browsing.png" alt="Screenshot-Mozilla Firefox (Private Browsing)" width="293" height="254" class="alignnone size-full wp-image-291" /></a>
tvSubmit = (TextView) findViewById(R.id.tvSubmit);
tvSubmit.setText(Html.fromHtml(webLinkText)));
ここをチェックしてください より詳細な答えについては
クリック可能なテキストをtextviewに追加するのに役立つこの関数を作成しました:
public static SpannableStringBuilder getSpannablableClickFor(CharSequence initialText, ClickableSpan click, String textToAppend) {
String description = String.format("%s %s", initialText, textToAppend);
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(description);
int start = description.indexOf(textToAppend);
int end = start + textToAppend.length();
spannableStringBuilder.setSpan(click,
start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableStringBuilder.setSpan(new StyleSpan(Android.graphics.Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableStringBuilder.setSpan(new UnderlineSpan(), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
final ForegroundColorSpan fcs = new ForegroundColorSpan(Color.WHITE);
spannableStringBuilder.setSpan(fcs, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableStringBuilder;
}
sp.setSpan(click, 0, sp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
値0を変更:テキスト内の位置開始リンクを使用します。例:値を10に変更すると、0を設定すると、すべてのテキストがハイパーリンクされます。