1. 程式人生 > >TextView做成連結及去掉連結下劃線

TextView做成連結及去掉連結下劃線

前言

    前幾天做了一個需求,它要求把TextView做成連結,但是要改變它的顏色和這個連結不要下劃線。一直陷入之前的TextView做成連結的坑中了,後來還是一個交流群的群友啟發了我。不同的需求有不同的做法,如果按著一種想法,最後可能都完不成的。下列是我做的一些Demo,分享給大家。

方式一:

    這種方式是通過xml檔案中設定,配置TextView的autoLink屬性,這個屬性有web(這個就是我需要的連結形式),email(一個電子郵件地址),none(正常的文字),phone(電話號碼),all(根據我們輸入的文字自動識別),map(會開啟一個地圖的應用)。
這裡寫圖片描述
一般會選all,不過我建議去選擇對應的屬性值。這裡我們選的是web,選好之後,你之前給TextView設定的顏色會變,如果想改顏色,可以通過SpannableString,但是這個連結的下劃線我沒用去掉。後面有去掉連結的下劃線辦法。

TextView textView = (TextView) findViewById(R.id.tv_web);
//這句很重要,必須加
textView.setMovementMethod(LinkMovementMethod.getInstance());

方式二:

    這種方法我覺得比較笨,但是效果可以達到,既可以刪除下劃線,又可以更改連結的顏色,好了,廢話不多說,直接上程式碼:

xml程式碼:
<TextView
        android:id="@+id/tv_web"
        android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="https://www.baidu.com/" android:textColor="#0f0" android:textSize="30sp" android:clickable="true" />
MainActivity程式碼:
TextView textView = (TextView) findViewById(R.id.tv_web);

        textView.setOnClickListener(new
View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,WebActivity.class); startActivity(intent); finish(); } });

第二個xml佈局檔案中就是一個WebView,填充父窗體
第二個Activity程式碼:

WebView webView = (WebView) findViewById(R.id.web);

WebSettings webSettings = webView.getSettings();
//設定WebView屬性,能夠執行Javascript指令碼
webSettings.setJavaScriptEnabled(true);
//設定可以訪問檔案
webSettings.setAllowFileAccess(true);
//設定支援縮放
webSettings.setBuiltInZoomControls(true);
//載入需要顯示的網頁
webView.loadUrl("https://www.baidu.com/");

這種方式就是點選TextView跳轉到另一個Activity,讓另一個Activity中的WebView載入Url

注意:這種方式需要在清單檔案宣告一下另一個Activity

方式三:

    通過和Html結合

textView.setText(Html.fromHtml("<a href='http://www.baidu.com'>百度</a>"));
        textView.setMovementMethod(LinkMovementMethod.getInstance());

這種方式連線的下滑線也沒有去除,顏色設定之後也沒有作用,只是單純的開啟連結。

方式四:

    這種方式是在方式二的啟發下,這種方式完美的解決了下劃線和顏色問題,直接上程式碼:

TextView textView = (TextView) findViewById(R.id.tv_web);

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Uri uri = Uri.parse("http://www.baidu.com");
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);
            }
        });

你使用這種方式,可以隨意的設定連結顏色,而且沒有下劃線。

注意:使用以上的方式不要忘記在清單中新增許可權

<uses-permission android:name="android.permission.INTERNET"/>

總結:

以上的這幾種方式,不一定是最優的,但是解決了我的需求問題,如果哪裡有錯誤的地方還請各位老鐵們及時指出。經過一系列的折騰,同樣的一種需求,可能有多種解決辦法,經常動腦思考,多看看不同的技術文章會讓你的腦洞大開。還是那句話,換個角度看問題,世界都變成不一樣了呢!(^__^) 嘻嘻……