Android TextView中實現點擊文本超連結(無底線)的封裝類,androidtextview

來源:互聯網
上載者:User

Android TextView中實現點擊文本超連結(無底線)的封裝類,androidtextview

        android中有的時候需要在TextView上設定一些超連結,點擊這些超連結時進行一些操作。例如新浪微博上的一些關鍵字,點擊時會跳轉到相應的頁面。


      如何?我們就直接看源碼吧。

/** * *created by Mr.Simple, Aug 21, 20141:51:40 PM. *Copyright (c) 2014, hehonghui@umeng.com All Rights Reserved. * *                ##################################################### *                #                                                   # *                #                       _oo0oo_                     #    *                #                      o8888888o                    # *                #                      88" . "88                    # *                #                      (| -_- |)                    # *                #                      0\  =  /0                    #    *                #                    ___/`---'\___                  # *                #                  .' \\|     |# '.                 # *                #                 / \\|||  :  |||# \                # *                #                / _||||| -:- |||||- \              # *                #               |   | \\\  -  #/ |   |              # *                #               | \_|  ''\---/''  |_/ |             # *                #               \  .-\__  '-'  ___/-. /             # *                #             ___'. .'  /--.--\  `. .'___           # *                #          ."" '<  `.___\_<|>_/___.' >' "".         # *                #         | | :  `- \`.;`\ _ /`;.`/ - ` : | |       # *                #         \  \ `_.   \_ __\ /__ _/   .-` /  /       # *                #     =====`-.____`.___ \_____/___.-`___.-'=====    # *                #                       `=---='                     # *                #     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   # *                #                                                   # *                #               佛祖保佑         永無BUG              # *                #                                                   # *                ##################################################### */package com.umeng.community.utils;import android.content.Context;import android.text.Html;import android.text.Spannable;import android.text.SpannableStringBuilder;import android.text.TextPaint;import android.text.method.LinkMovementMethod;import android.text.style.ClickableSpan;import android.text.style.URLSpan;import android.widget.TextView;/** * @author mrsimple */public abstract class TopicSpanWrapper extends ClickableSpan {    protected Context mContext;    protected TextView mTextView;    /**     * @param context     * @param tv     */    public TopicSpanWrapper(Context context, TextView tv) {        mContext = context;        mTextView = tv;        updateClickSpan(tv);    }    /**     * 更新Span     *      * @param rv     */    public void updateClickSpan(TextView tv) {        // 這裡拼接超連結, 我在前後加了一個井號,可自行去除        String htmlLinkText = "<a href='這裡可以填寫某個url'>#" + tv.getText().toString() + "#</a>";        tv.setText(Html.fromHtml(htmlLinkText));        tv.setMovementMethod(LinkMovementMethod.getInstance());        CharSequence text = tv.getText();        if (text instanceof Spannable) {            int end = text.length();            Spannable sp = (Spannable) tv.getText();            URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);            SpannableStringBuilder style = new SpannableStringBuilder(text);            style.clearSpans(); // should clear old spans            for (URLSpan url : urls) {                // 設定Span                style.setSpan(this, sp.getSpanStart(url), sp.getSpanEnd(url),                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);            }            tv.setText(style);        }    }    @Override    public void updateDrawState(TextPaint ds) {        super.updateDrawState(ds);        // 去掉超連結的底線        ds.setUnderlineText(false);    }}

使用樣本 : 

public class UserInfoActivity extends FragmentActivity implements OnClickListener {    FragmentManager mFragmentMan;      private TextView mUserNameTv;    /*     * (non-Javadoc)     * @see android.app.Activity#onCreate(android.os.Bundle)     */    @Override    protected void onCreate(Bundle savedInstanceState) {        requestWindowFeature(Window.FEATURE_NO_TITLE);        super.onCreate(savedInstanceState);        setContentView(R.layout.umeng_comm_user_info);        initUIComponents();    }    /**     *      */    private void initUIComponents() {        mFragmentMan = getSupportFragmentManager();        mPostedFragment = new PostedFragment();        mFragmentMan                .beginTransaction()                .add(R.id.user_info_fragment_container, mPostedFragment,                        PostedFragment.class.getSimpleName()).commit();        // 布局就不給出了,總之user_name_tv是一個TextView        mUserNameTv = (TextView) findViewById(R.id.user_name_tv);        /**         * 將TextView中的文本封裝成可點擊的超連結         */        new TopicSpanWrapper(this, mUserNameTv) {            @Override            public void onClick(View widget) {                Toast.makeText(mContext, "點擊了超連結文本", Toast.LENGTH_SHORT).show();            }        };         }}

效果 : 

  


點擊以後 




圖片中Toast的文字和代碼的不一致,是因為文中寫的與我demo中的文字不一樣,直接忽略這個問題即可。



怎實現TextView中,部分文字響應點擊跳轉到新的頁面

在TextView添加一個屬性:android:autoLink="web" 相當於添加一個連結。不知道是否對你有協助。
 
android textview怎通過代碼將文本轉換為超連結

設定textview的onclicklistener,這監聽器裡呼叫瀏覽器開啟你的連結
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.