android TextView 復(fù)習(xí)

寫在前面的話

對(duì)于TextView,我想大家都已經(jīng)熟的不能再熟了。但是它的用法我們真的熟么握巢?

TextView設(shè)置基礎(chǔ)
字符串資源里變量替換
Android開發(fā)中是拒絕硬編碼的,我們可能會(huì)把一些字符串放在xml中當(dāng)作資源使用群凶,假設(shè)有如下情況:

<string name="welcome">你好A钳恕,歡迎使用我們的App。</string>

我們?cè)诔绦蛑行枰褂眠@個(gè)字符串莹规,但是A是一個(gè)變量赔蒲,很常規(guī)的辦法是取出這個(gè)字符串,然后用String的replace方法把A替換成用戶的昵稱访惜。
其實(shí)嘹履,在android中有這樣一個(gè)東西,那就是 XLIFF债热,全稱叫 XML 本地化數(shù)據(jù)交換格式砾嫉,英文全稱 XML Localization Interchange File Format。
用法也是很簡(jiǎn)單的窒篱,如

<string name="welcome">你好%1$s焕刮,歡迎使用我們的App。</string>

程序中只要給變量賦值就可以了墙杯,如

String welcome = getString(R.string.welcome, "小丸子");

把字符串打印出來如下

Paste_Image.png

這里的1代表第一個(gè)變量配并,多個(gè)變量的話依次遞增即可。

TextView中設(shè)置多種字體大小
比如在項(xiàng)目中經(jīng)常遇到如下UI高镐,


像這樣的兩種字體大小放到一個(gè)TextView中溉旋,我們應(yīng)該如何處理呢?需要用到 android.text 命名空間下的一些與 spannable相關(guān)的類和接口嫉髓。如下:

String text = "您已經(jīng)連續(xù)走了5963步";
int start = text.indexOf('5');
int end = text.length();
Spannable textSpan = new SpannableStringBuilder(text);
textSpan.setSpan(new AbsoluteSizeSpan(16), 0, start, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
textSpan.setSpan(new AbsoluteSizeSpan(26), start, end - 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
textSpan.setSpan(new AbsoluteSizeSpan(16), end - 1, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
TextView textView = (TextView) findViewById(R.id.text);
textView.setText(textSpan);

代碼中的設(shè)置方式:setAutoLinkMask(int)观腊。

參數(shù)和上邊列表對(duì)應(yīng),分別為:Linkify.WEB_URLS算行,Linkify.EMAIL_ADDRESSES梧油,Linkify.PHONE_NUMBERS,Linkify.MAP_ADDRESSES州邢,Linkify.ALL

但是需要注意的是儡陨,當(dāng)我們需要定制超鏈接的跳轉(zhuǎn)時(shí)應(yīng)該怎么做?答案是還是選擇Spannable量淌。代碼如下:

//將TextView的顯示文字設(shè)置為SpannableString
testText.setText(getClickableSpan());
//設(shè)置該句使文本的超連接起作用
testText.setMovementMethod(LinkMovementMethod.getInstance());

//設(shè)置超鏈接文字
private SpannableString getClickableSpan() {
    SpannableString spanStr = new SpannableString("使用該軟件骗村,即表示您同意該軟件的使用條款和隱私政策");
    //設(shè)置下劃線文字
    spanStr.setSpan(new UnderlineSpan(), 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    //設(shè)置文字的單擊事件
    spanStr.setSpan(new ClickableSpan() {
        @Override
        public void onClick(View widget) {
            startActivity(new Intent(MainActivity.this, UsageActivity.class));
        }
    }, 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    //設(shè)置文字的前景色
    spanStr.setSpan(new ForegroundColorSpan(Color.GREEN), 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    //設(shè)置下劃線文字
    spanStr.setSpan(new UnderlineSpan(), 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    //設(shè)置文字的單擊事件
    spanStr.setSpan(new ClickableSpan() {
        @Override
        public void onClick(View widget) {
            startActivity(new Intent(MainActivity.this, PrivacyActivity.class));
        }
    }, 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    //設(shè)置文字的前景色
    spanStr.setSpan(new ForegroundColorSpan(Color.GREEN), 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    return spanStr;
}

運(yùn)行效果如下圖:
Paste_Image.png

實(shí)現(xiàn)點(diǎn)擊文字打電話,發(fā)郵件,跳轉(zhuǎn)網(wǎng)頁,發(fā)短信,發(fā)彩信,看地圖

testText2.setText(getClickableSpan());//設(shè)置該句使文本的超連接起作用   
testText2.setMovementMethod(LinkMovementMethod.getInstance());

   private SpannableString getClickableSpan() {
        //tv_test2=他們叫我富文本,我能打電話,發(fā)郵件,跳轉(zhuǎn)網(wǎng)頁,發(fā)短信,發(fā)彩信,看地圖,怕了吧,嘻嘻
        SpannableString spanStr = new SpannableString(getString(R.string.tv_test2));
        spanStr.setSpan(new URLSpan("tel:10010"), 11, 13, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//打電話
        spanStr.setSpan(new URLSpan("mailto:muqingxs@google.com"), 15, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //郵件
        spanStr.setSpan(new URLSpan("http://www.baidu.com"), 20, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //網(wǎng)絡(luò)
        spanStr.setSpan(new URLSpan("sms:10010"), 24, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //短信   使用sms:或者smsto:
        spanStr.setSpan(new URLSpan("mms:10010"), 28, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //彩信   使用mms:或者mmsto:
        spanStr.setSpan(new URLSpan("geo:31.075758,121.503256"), 32, 34, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //地圖

//        設(shè)置下劃線文字
        spanStr.setSpan(new UnderlineSpan(), 35, 38, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spanStr.setSpan(new AbsoluteSizeSpan(20,true), 35, 38, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //設(shè)置文字的單擊事件
        spanStr.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                ToastUtils.showToast(MainActivity.this, "我好怕怕");
            }
        }, 35, 38, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        return spanStr;
    }
}

參考博客

http://blog.csdn.net/xiangzilv1987/article/details/8212064
http://android.jobbole.com/83961/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市呀枢,隨后出現(xiàn)的幾起案子叙身,更是在濱河造成了極大的恐慌,老刑警劉巖硫狞,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件信轿,死亡現(xiàn)場(chǎng)離奇詭異晃痴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)财忽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門倘核,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人即彪,你說我怎么就攤上這事紧唱。” “怎么了隶校?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵漏益,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我深胳,道長(zhǎng)绰疤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任舞终,我火速辦了婚禮轻庆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敛劝。我一直安慰自己余爆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布夸盟。 她就那樣靜靜地躺著蛾方,像睡著了一般。 火紅的嫁衣襯著肌膚如雪上陕。 梳的紋絲不亂的頭發(fā)上桩砰,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音唆垃,去河邊找鬼。 笑死痘儡,一個(gè)胖子當(dāng)著我的面吹牛辕万,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沉删,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼渐尿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了矾瑰?” 一聲冷哼從身側(cè)響起砖茸,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎殴穴,沒想到半個(gè)月后凉夯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體货葬,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年劲够,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了震桶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡征绎,死狀恐怖蹲姐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情人柿,我是刑警寧澤柴墩,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站凫岖,受9級(jí)特大地震影響江咳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜隘截,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一扎阶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婶芭,春花似錦东臀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呵哨,卻和暖如春赁濒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孟害。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工拒炎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挨务。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓击你,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親谎柄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丁侄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容