TextView使用

今天再次學(xué)習(xí)了一下android中最常見的控件--TextView是使用與其屬性方法鸥滨。記錄下來阀溶,以免忘記停忿。
先看看使用TextView能實現(xiàn)些申明特殊的效果把:


TextView001.gif
        圖1 textView實現(xiàn)跑馬燈效果


textview002.gif

圖2 TextView實現(xiàn)解析簡單的html網(wǎng)頁

textView003.gif


圖3 實現(xiàn)多個TextView的跑馬燈和折疊TextView

常見屬性設(shè)置

省略了必要設(shè)置的寬和、高屬性和常見的位置設(shè)置屬性腔彰。

android:text <!--設(shè)置文本內(nèi)容 后面是對應(yīng)的java-->  setText();
android:textSize  <!--設(shè)置文字的大小芍阎,推薦單位為dp-->   setTextSize();
android:textColor <!--設(shè)置文字的顏色--> setTextColor();
android:textStyle <!--設(shè)置文字形狀-->   setTextStyle();
android:typeface  <!--設(shè)置文本字體世曾,normal,sans,serif,monospace--> setTypeface();
android:textScaleX <!--設(shè)置文字之間的間隔,默認為1.0f--> setTextScaleX();
android:background <!--設(shè)置背景顏色--> setBackgroundColor();
android:textColorLink  <!--設(shè)置文字鏈接的顏色-->  setTextColorLink();  
android:lines <!--設(shè)置文本行數(shù)--> setLines();
android:singleLine <!--單行顯示,現(xiàn)在已經(jīng)不推薦使用--> setSingleLine();

TextView高級屬性設(shè)置

高級是不是高級我不知道谴咸,但是下面這些屬性我個人用的比較少:

android:autoLink  //設(shè)置是否顯示為可點擊的鏈接轮听。可選值(none/web/email/phone/map/all)
android:drawableBottom      //在text的下方輸出一個drawable(圖片)岭佳,同理可在上血巍、左右輸出圖片
android:drawablePadding     //設(shè)置text與drawable(圖片)的間隔,需在有圖片的情況下使用珊随,否則無效
android:ellipsize          //設(shè)置當文字過長時述寡,該控件該如何顯示柿隙。可設(shè)置如下屬性值:"start"省略號顯示在開頭;"end”省略號顯示在結(jié)尾;"middle"省略號顯示在中間; "marquee" 以跑馬燈的方式顯示(動畫橫向移動)
android:linksClickable          //設(shè)置點擊時是否鏈接鲫凶,即使設(shè)置了autoLink
android:marqueeRepeatLimit     //在ellipsize設(shè)定為marquee時禀崖,設(shè)置重復(fù)滾動的次數(shù),設(shè)置為marquee_forever時表示無限次螟炫。
android:shadowRadius         //設(shè)置陰影的半徑波附。設(shè)置為0.1就變成字體的顏色了,一般設(shè)置為3.0的效果比較好
android:shadowColor           //指定文本陰影的顏色不恭,需要與shadowRadius一起使用

TextView中使用富文本

我原本以為TextView只能用來顯示文字叶雹,后來發(fā)現(xiàn)TextView遠遠比想象的要強大的多,我們甚至可以用他來翻譯網(wǎng)頁』话桑現(xiàn)在讓我記錄下TextView是怎么解析html的吧:
相信大家都知道在java代碼中的setText()這個方法吧,我們可以在里面?zhèn)魅隒harSequence钥星,讓其在TextView中顯示出來沾瓦。在android中又有Html.fromHtml()可以將html轉(zhuǎn)化成CharSequence。所以谦炒,對Html進行最簡單的解析可以這樣寫:


mHtml = "<html><body>這里添加了超鏈接贯莺,點擊試試把<a ;
//此處省略了findViewById
mTextView.setText(Html.fromHtml(mHtml));

結(jié)果如圖:

textView0012.jpg

圖4 簡單的html解析
是不是很簡單,但是點擊連接文本宁改,發(fā)現(xiàn)并沒有反應(yīng)缕探,這個因為我們還沒有為他設(shè)置響應(yīng)點擊事件,設(shè)置也很簡單还蹲,代碼如下:

 mTextView.setMovementMethod(LinkMovementMethod.getInstance());//響應(yīng)html中的點擊事件

當解析的html比較多爹耗,一個頁面不能顯示完全時,可以設(shè)置滑動顯示:

 mTextView.setMovementMethod(ScrollingMovementMethod.getInstance());// 滾動

好了谜喊,以為這樣就完了潭兽?No。TextView強大的功能還在后面呢斗遏。當html中有圖片時山卦,我們又該怎么解析呢?诵次?只需要重寫Html.fromHtml()中的ImageGetter方法账蓉,就可以添加圖片到TextView中進行顯示,是不是很神奇逾一?
例如铸本,我們對網(wǎng)絡(luò)圖片進行解析:可以這樣重寫ImageGetter()方法。

  Html.ImageGetter mImgGetFormNetwork = new Html.ImageGetter() {
                public Drawable getDrawable(String source) {
                    Drawable drawable = null;
                    URL url;
                    try {
                        url = new URL(source);
                        drawable = Drawable.createFromStream(url.openStream(), "");  //獲取網(wǎng)路圖片
                    } catch (Exception e) {
                        return null;
                    }
                    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable
                            .getIntrinsicHeight());
                    return drawable;
                }
            };

調(diào)用的時候可以這樣:

 mTextView.setText(Html.fromHtml(mHtml1,mImgGetFormNetwork,null));

不過加載網(wǎng)絡(luò)圖片還不不建議直接放在主線程中嬉荆,放在主線程會導(dǎo)致UI阻塞归敬,強烈不推薦這么寫,可以考慮開一個線程來進行獲取圖片。
最后汪茧,想要你的程序運行椅亚,還需要添加網(wǎng)絡(luò)訪問權(quán)限:

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

到現(xiàn)在,我們的TextView不但可以顯示文字舱污,還可以顯示圖片了呀舔。但是android中的html解析能力十分有限,當html中有不可識別的標簽時扩灯,我們又該怎么做呢媚赖?注意看,Html.fromHtml()珠插;中一共有三個參數(shù)惧磺,最后一個就是讓我們來解決不能識別的tag的。最后一個參數(shù)是TagHandler捻撑,我們只需要通過重寫TagHandker來識別自身的標簽磨隘,就可以達到正確解析的目的,那么怎么使用呢顾患?可以直接參考源博客http://blog.csdn.net/u010418593/article/details/9322197,也可以參考下面的代碼:
重寫TagHandler番捂,在這里我們對其不能解析的size標簽進行自定義解析:

/**
 * Created by 24540 on 2016/11/9.
 * 參考博客:http://blog.csdn.net/u010418593/article/details/9322197
 */

class SizeLabel implements Html.TagHandler {
    private int size;

    public SizeLabel(int size) {
        this.size = size;
    }

    @Override
    public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
        /**
            * 參數(shù):
            * opening:為true時表示開始解析,為false時表示解析完
            * tag:當前解析的標簽
            * output:文本中的內(nèi)容
            * xmlReader:xml解析器
         **/
        // 判斷當前解析的tag是否為size,并且已經(jīng)解析完畢(在沒有解析完畢之前output中沒有數(shù)據(jù))
        if(tag.toLowerCase().equals("size") && !opening) {
            // 通過output調(diào)用setSpan方法,改變文本的0下標到最后的下標的大小;
            // 最后的參數(shù)用來標識在span范圍內(nèi)的文本前后輸入新的字符時是否也改變它們的效果;
            Log.d("TAG","size里面的內(nèi)容在這里"+output);
            output.setSpan(new AbsoluteSizeSpan(size), 0, output.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
    }
}

回到MainActivity中,下面是我們的調(diào)用:

        String html = "<font color='red' face='verdana'><size>自定義Html標簽</size>普通的大小</font>";
        mText2.setText(Html.fromHtml(html,null,new SizeLabel(20)));

效果如下所示:

textView002.jpg


圖5 解析不能識別的tag
可以看出來江解,對size的解析符合我們的預(yù)想设预。
對上面的綜合運行,就可以解析出簡單的html頁面犁河,圖2就是我解析出來的一個簡答的html界面鳖枕。效果還可以吧~~。

TextView的其他效果

圖1的跑馬燈效果:只需要在xml文件中定義:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text_test"
        android:ellipsize="marquee"
        android:focusableInTouchMode="true"
        android:focusable="true"
        android:background="#00ff00"
        android:textSize="20sp"
        android:textColor="#3c44af"
        android:textAppearance="?android:attr/textAppearanceLargeInverse"
        android:marqueeRepeatLimit="marquee_forever"
        android:text="這里實現(xiàn)跑馬燈效果,我先輸入很多很多的內(nèi)容呼股,一行不能顯示完全耕魄。"
       android:singleLine="true"
        />

其中 android:ellipsize="marquee"、android:focusable="true"彭谁、android:singleLine="true"是實現(xiàn)跑馬燈的關(guān)鍵吸奴。
圖2中多個TextView的跑馬燈效果:
對圖1的實現(xiàn)效果簡單說明下,只有當TextView獲取焦點的時候缠局,‘a(chǎn)ndroid:focusable="true"’才能出現(xiàn)跑馬燈的效果则奥,當是當有多個TextView,用上述方法就行不同了狭园,因為我們無效同時獲取多個TExtView的焦點读处,從而會導(dǎo)致只有一個TextView才能實現(xiàn)跑馬燈的效果。想實現(xiàn)多個TextView的跑馬燈效果也很簡單唱矛,只需要重寫TextView默認獲取到焦點就可以了罚舱。

package students.textviewdemo;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

/**
 * Created by 24540 on 2016/11/9.
 */

public class HorseRaceLamp extends TextView{
    public HorseRaceLamp(Context context) {
        super(context);
    }

    public HorseRaceLamp(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public HorseRaceLamp(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public HorseRaceLamp(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean isFocused() {
        return true;//在這里設(shè)置獲取焦點井辜,如此便可實現(xiàn)多個TextView的跑馬燈效果
    }
}

在xml文件中進行引用就可以了:

 <students.textviewdemo.HorseRaceLamp
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:singleLine="true"
        android:text="這里要實現(xiàn)跑馬等效果,所以這里的內(nèi)容肯定不能太少了管闷,為此我在這里添加了很多沒用的內(nèi)容" />

    <students.textviewdemo.HorseRaceLamp
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:paddingTop="10dp"
        android:singleLine="true"
        android:text="挫折時粥脚,要像大樹一樣,被砍了包个,還能再長刷允;也要像雜草一樣,雖讓人踐踏碧囊,但還能勇敢地活下去" />

很簡單把树灶。下面介紹怎么折疊TextView
因為個人感覺這樣寫還是不夠好,所以就不把代碼貼上來糯而,簡單的說下思路强缘。過兩天在琢磨一下芍殖,用更好的方式實現(xiàn)腊脱。

要實現(xiàn)折疊效果偿曙,肯定是需要一個TextView和一個Imageview的。當我們點擊ImageView時谜洽,對TextView的line進行設(shè)置。再次點擊還原設(shè)置即可實現(xiàn)這樣的效果吴叶。
---優(yōu)雅的代碼估計應(yīng)該可以在一周內(nèi)更新阐虚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蚌卤,隨后出現(xiàn)的幾起案子实束,更是在濱河造成了極大的恐慌,老刑警劉巖逊彭,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咸灿,死亡現(xiàn)場離奇詭異,居然都是意外死亡侮叮,警方通過查閱死者的電腦和手機避矢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囊榜,“玉大人审胸,你說我怎么就攤上這事⌒渡祝” “怎么了砂沛?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長曙求。 經(jīng)常有香客問我碍庵,道長映企,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任静浴,我火速辦了婚禮堰氓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘马绝。我一直安慰自己豆赏,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布富稻。 她就那樣靜靜地躺著掷邦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪椭赋。 梳的紋絲不亂的頭發(fā)上抚岗,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音哪怔,去河邊找鬼宣蔚。 笑死,一個胖子當著我的面吹牛认境,可吹牛的內(nèi)容都是我干的胚委。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叉信,長吁一口氣:“原來是場噩夢啊……” “哼亩冬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起硼身,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤硅急,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佳遂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體营袜,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年丑罪,在試婚紗的時候發(fā)現(xiàn)自己被綠了荚板。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡巍糯,死狀恐怖啸驯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祟峦,我是刑警寧澤罚斗,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站宅楞,受9級特大地震影響针姿,放射性物質(zhì)發(fā)生泄漏袱吆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一距淫、第九天 我趴在偏房一處隱蔽的房頂上張望绞绒。 院中可真熱鬧,春花似錦榕暇、人聲如沸蓬衡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狰晚。三九已至,卻和暖如春缴啡,著一層夾襖步出監(jiān)牢的瞬間壁晒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工业栅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秒咐,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓碘裕,卻偏偏與公主長得像携取,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子帮孔,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點贊按鈕進度條TabLayout圖標下拉刷新...
    皇小弟閱讀 46,761評論 22 665
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程歹茶,因...
    小菜c閱讀 6,419評論 0 17
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件你弦、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 柳哲 “過事無痕”,有人如是說燎孟。按照字面禽作,可以這樣理解:過去的事情,不留一點痕跡揩页,只關(guān)注當下旷偿。當然這句話,也可以這...
    柳志儒閱讀 348評論 0 2