20

私はClickableSpanTextView で作業しており、クリックされたスパンのテキストを取得しようとしています。これは私のコードです。

// this is the text we'll be operating on
SpannableString text = new SpannableString("Lorem ipsum dolor sit amet");

// make "dolor" (characters 12 to 17) display a toast message when touched
ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View view) {
        // This will get "Lorem ipsum dolor sit amet", but I just want "dolor"
        String text = ((TextView) view).getText().toString(); 
        Toast.makeText(context, text, Toast.LENGTH_LONG).show();
    }
};

text.setSpan(clickableSpan, 12, 17, 0);

ご覧のとおり、 を 12 から 17 の文字に設定clickablespanし、イベントTextViewでこれらの文字を取得したいと考えています。onClick

とにかく私はそれを行うことができますか?または、少なくとも12, 17パラメーターをonClickイベントに渡すことはできますか?

ありがとうございました!

4

4 に答える 4

40

これを試して:

public class LoremIpsumSpan extends ClickableSpan {
    @Override
    public void onClick(View widget) {
        // TODO add check if widget instanceof TextView
        TextView tv = (TextView) widget;
        // TODO add check if tv.getText() instanceof Spanned
        Spanned s = (Spanned) tv.getText();
        int start = s.getSpanStart(this);
        int end = s.getSpanEnd(this);
        Log.d(TAG, "onClick [" + s.subSequence(start, end) + "]");
    }
}
于 2013-11-03T07:18:43.730 に答える
5

もう少し単純に、必要に応じてモデル参照を渡すこともできます。

public class SpecialClickableSpan extends ClickableSpan {

    String text;

    public SpecialClickableSpan(String text){
         super();
         this.text = text;
    }

    @Override
    public void onClick(View widget) {
         Log.d(TAG, "onClick [" + text + "]");
    }
}

次に、 new SpecialClickableSpan("My Text") を呼び出します

于 2014-01-30T22:34:32.680 に答える
0

このように文字列をスパン可能にするために使用することもできます

String htmlLinkText = "Lorem ipsum <a href='http://www.google.com'>dolor</a> sit amet";
    testView.setText(Html.fromHtml(htmlLinkText));
    testView.setMovementMethod(LinkMovementMethod.getInstance());

    CharSequence text = testView.getText();
    if (text instanceof Spannable) {
        int end = text.length();
        Spannable sp = (Spannable) testView.getText();
        URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);
        SpannableStringBuilder style = new SpannableStringBuilder(text);
        style.clearSpans();//should clear old spans
        for (URLSpan url : urls) {
            CustomerTextClick click = new CustomerTextClick(url.getURL());
            style.setSpan(click, sp.getSpanStart(url), sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        testView.setText(style);
    }

そしてCustomerTextClick

プライベート静的クラス CustomerTextClick は ClickableSpan を拡張します {

    private String mUrl;

    CustomerTextClick(String url) {
        mUrl = url;
    }

    @Override
    public void onClick(View widget) {
        // TODO Auto-generated method stub
        //Toast.makeText(ctx, "hello google!",Toast.LENGTH_LONG).show();
        // Do your action here
    }
}

テスト済みで動作するコード。

于 2016-04-06T08:19:22.097 に答える