Android SpannableString實現TextView的點擊事件


最近項目中遇到一個問題,就是一段文字中股票可點擊並跳到股票詳情,只記得SpannableString可以實現富文本功能,但並不知道可實現的富文本有點擊功能,就開始借助萬能搜索引擎,結果不出意料,的確有ClickableSpan這個類可實現點擊功能,於是就開始查找Android api ClickableSpan,廢話不說了上代碼

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = (TextView) findViewById(R.id.text);
        tv.setText(getClickableSpan());
        tv.setMovementMethod(LinkMovementMethod.getInstance());//必須設置否則無效
    }
    private SpannableString getClickableSpan() {
        View.OnClickListener l = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, " you are clicking ~",
                        Toast.LENGTH_SHORT).show();
            }
        };

        SpannableString spanableInfo = new SpannableString(
                "This is a test, Click Me");
        int start = 16;
        int end = spanableInfo.length();
        spanableInfo.setSpan(new Clickable(l), start, end,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        return spanableInfo;
    }

    /**
     * 內部類,用於截獲點擊富文本后的事件
     */
    class Clickable extends ClickableSpan implements View.OnClickListener {
        private final View.OnClickListener mListener;

        public Clickable(View.OnClickListener mListener) {
            this.mListener = mListener;
        }

        @Override
        public void onClick(View v) {
            mListener.onClick(v);
        }
        @Override
        public void updateDrawState(TextPaint ds) {
            ds.setColor(ds.linkColor);
            ds.setUnderlineText(false);    //去除超鏈接的下划線
        }
    }
}

參考:http://blog.csdn.net/lan410812571/article/details/9083023

http://blog.csdn.net/lan410812571/article/details/9083023


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM