天天看點

Android TextView

一、CharSequence類

           代表的是字元集合的一個接口類,String類實作了該接口。提供了對于字元操作的一些方法:charAt(int index),toString(),length(),subSequence(int start,int end)。對于接口類來說,我們是不可以直接new對象的:

CharSequence cs = "aa";//正确的寫法
//CharSequence cs1 = new CharSequence("aa");//錯誤的寫法
           
二、擷取strings.xml中的字元串資源

        在Activity中可以通過兩種不同的書寫方式來擷取xml中字元串資源。

        第一種先擷取Resource對象,然後調用起getString()方法。

Resources res = getResources();
String s1 = res.getString(R.string.hello_world);
           

        第二種直接調用Context.getString()方法。

String s = this.getString(R.string.hello_world);
           

       第一種方法是我們擷取res檔案夾下資源的一種通用模式,第二種是context提供的一種簡便方式。

三、TextView

       設定TextView的大小時,我們一般使用sp,系統可以根據不同的手機分辨率進行優化。

       setText()方法中可傳入的參數中使用CharSequence而不是String,說一下我對CharSequence vs String的一點觀點。1.性能上的考慮,String的不可變性使得我們在使用String對象時總有那麼一點小顧慮,而CharSequence可以改變的。2、CharSequence有多個實作的子類,可以增加使用的範圍。如果是String的話,就把條件限定死了。

四、各種具體的應用效果

1、單行顯示效果、走馬燈效果

      在應用中為了布局顯示效果,有時候我們需要将TextView控制成單行顯示。如果我們不做處理,但文字過長時會自動換行,有下面的效果:

Android TextView

在xml中可以通過設定屬性android:singleLine="true"控制TextView的單行顯示,如圖:

Android TextView

從效果中可以看出,預設右邊超出部分用省略号(。。。)來代替了。有個小的糾結的地方是,設定單行的屬性後,TextView的顯示效果不再是垂直居中,而是向頂部對其嗎,就算使用android:gravity="center_vertical"依然沒有改變。暫時還不知道具體是什麼原因,如果有知道的高手請指出。對于效果追求完美主義者,暫且添加android:paddingTop="4dp"屬性,先從表面上解決這一點點瑕疵吧。

Android TextView

控制省略号顯示的位置,可以通過ellipsize屬性來實作。這個屬性控制的效果是,當文本過長時以什麼樣的效果來顯示,有4種選擇:

a、省略号顯示在開頭android:ellipsize="start"

b、省略号顯示在中間android:ellipsize="middle"

c、省略号顯示在末尾android:ellipsize="end" (預設)

d、走馬燈效果android:ellipsize="marquee"

Android TextView

為什麼現在的走馬燈沒效果了?TextView需要獲得焦點的時候,才會有走馬燈效果。添加android:focusable="true"和android:focusableInTouchMode="true"兩個屬性要同時添加上去。預設走馬燈效果隻有一次,如果想讓它一直走馬燈需要設定屬性android:marqueeRepeatLimit="marquee_forever",如果是想精确控制次數,可以設定你想要的次數如:android:marqueeRepeatLimit="3",則隻會有3次效果,然後就停止。當然我們也可以通過代碼手動設定停止走馬燈效果:zouMaDengTextView.setSelected(false)時可以停止,當要再次開始時設定為true;

如果遇到奇葩要求比如設定走馬燈的速度這樣的,目前從系統提供的方法中我還沒有找到。對于特定需要我們一般需要特定處理,那就是自定義,這裡有篇文章是寫這方面效果的http://www.jb51.net/article/33208.htm;

以上是xml布局部分,不排除有時候需要用代碼布局的情況,接下來寫一下用java代碼來實作走馬燈效果:

tv.setText("在應用中為了布局顯示效果,有時候我們需要将TextView控制成單行顯示。 在應用中為了布局顯示效果,有時候我們需要将TextView控制成單行顯示。");
tv.setSingleLine();
tv.setSelected(true);
tv.setFocusable(true);
tv.setFocusableInTouchMode(true);
tv.setMarqueeRepeatLimit(-1);
tv.setEllipsize(TruncateAt.MARQUEE);
           

tv.setMarqueeRepeatLimit(-1)表示一直有走馬燈效果。

TextView的效果還要很多,有時間會接着這裡繼續添加。