23

文字列の一部からアクティビティを起動する方法はありますか?

たとえば、strings.xmlファイルにこれがあります。

<string name="clickable_string">This is a <u>clickable string</u></string>

タグ間のテキストuに下線を付け、クリックするとアクティビティを起動します。TextView

4

3 に答える 3

43

これを試して、

final Context context = ... // whereever your context is
CharSequence sequence = Html.fromSource(context.getString(R.string.clickable_string));
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
UnderlineSpan[] underlines = strBuilder.getSpans(UnderlineSpan.class);
for(UnderlineSpan span : underlines) {
   int start = strBuilder.getSpanStart(span);
   int end = strBuilder.getSpanEnd(span);
   int flags = strBuilder.getSpanFlags(span);
   ClickableSpan myActivityLauncher = new ClickableSpan() {
     public void onClick(View view) {
       context.startActivity(getIntentForActivityToStart());
     }
   };

   strBuilder.setSpan(myActivityLauncher, start, end, flags);
}

TextView textView = ...
textView.setText(strBuilder);
textView.setMovementMethod(LinkMovementMethod.getInstance());

基本的に、クリック可能にしたい文字の範囲にSpanオブジェクトをアタッチする必要があります。とにかくHTMLを使用しているので、Html.fromSource()によって配置された下線スパンを独自のスパンのマーカーとして使用できます。

または、自分だけが知っている文字列内にタグを定義することもできます。つまり<activity> 、独自のタグハンドラーをHtml.fromSource()メソッドに提供します。このようにして、TagHandlerインスタンスは、タグ付けされたテキストを特定の色で囲み、下線を引き、太字にし、クリック可能にするなどの操作を実行できます。ただし、このタイプのコードを頻繁に記述している場合にのみ、TagHandlerアプローチをお勧めします。

于 2010-10-26T17:37:08.043 に答える
2

この文字列をxmlレイアウトの1つに割り当ててから、コードでTextViewのIDを取得し、このTextviewにOnClickListenerを実装します。その中で、必要な新しいアクティビティを開始できます。

于 2010-10-26T16:58:18.623 に答える
2

ここで回答済みtextviewの一部をクリック可能にする(URLではない) HTMLメッセージで使用する場合は、変更を加えました。表示機能で次の手順を実行します。

public void displayText(String message) {

            chapterTextView.setText(Html.fromHtml(message),TextView.BufferType.SPANNABLE);
            chapterTextView.setMovementMethod(LinkMovementMethod.getInstance());
            Spannable clickableMessage = (Spannable) chapterTextView.getText();
            chapterTextView.setText(addClickablePart(clickableMessage), BufferType.SPANNABLE);
}

addClickablePartの変更された関数

private SpannableStringBuilder  addClickablePart(Spannable charSequence) {
        SpannableStringBuilder  ssb = new SpannableStringBuilder(charSequence);

        int idx1 = charSequence.toString().indexOf("(");
        int idx2 = 0;
        while (idx1 != -1) {
            idx2 = charSequence.toString().indexOf(")", idx1) + 1;

            final String clickString = charSequence.toString().substring(idx1, idx2);
            ssb.setSpan(new ClickableSpan() {

                @Override
                public void onClick(View widget) {
                    Toast.makeText(getActivity(), clickString,
                            Toast.LENGTH_SHORT).show();
                }
            }, idx1, idx2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            idx1 = charSequence.toString().indexOf("(", idx2);
        }

        return ssb;
    }

これが誰かを助けることを願っています。

于 2014-08-04T23:21:27.983 に答える