Android:TextView 自動滾動(跑馬燈)

來源:互聯網
上載者:User

標籤:

Android:TextView 自動滾動(跑馬燈)  

 

   TextView實現文字滾動需要以下幾個要點:1.文字長度長於可顯示範圍:android:singleLine="true"2.設定可滾到,或顯示樣式:android:ellipsize="marquee"3.TextView只有在擷取焦點後才會滾動顯示隱藏文字,因此需要在包中建立一個類,繼承TextView。重寫isFocused方法,這個方法預設行為是,如果TextView獲得焦點,方法返回true,失去焦點則返回false。跑馬燈效果估計也是用這個方法判斷是否獲得焦點,所以把它的傳回值始終設定為true。 以下轉自他人: Java語言: AlwaysMarqueeTextView 類
public class AlwaysMarqueeTextView extends TextView {public AlwaysMarqueeTextView(Context context) {super(context);}public AlwaysMarqueeTextView(Context context, AttributeSet attrs) {super(context, attrs);}public AlwaysMarqueeTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overridepublic boolean isFocused() {return true;}

 

在布局XML檔案中加入這麼一個AlwaysMarqueeTextView,這個加入方法也是剛剛學的。

XML語言: layout.xml
<com.examples.AlwaysMarqueeTextViewandroid:id=“@+id/AMTV1″android:layout_width=“fill_parent”android:layout_height=“wrap_content”android:lines=“1″android:focusable=“true”android:focusableInTouchMode=“true”android:scrollHorizontally=“true”android:marqueeRepeatLimit=“marquee_forever”android:ellipsize=“marquee”android:background=“@android:color/transparent”/>

 

ellipsize屬性
設定當文字過長時,該控制項該如何顯示。有如下值設定:”start”—–省略符號顯示在開頭;”end”——省略符號顯示在結尾;”middle”—-省略符號顯示在中間;”marquee” ——以跑馬燈的方式顯示(動畫橫向移動)

EidtText和textview中內容過長的話自動換行,使用android:ellipsize與android:singleine可以解決,使只有一行。

EditText不支援marquee

用法如下:

在xml中

android:ellipsize = "end"    省略符號在結尾android:ellipsize = "start"   省略符號在開頭android:ellipsize = "middle"     省略符號在中間android:ellipsize = "marquee"  跑馬燈android:singleline = "true"

 

當然也可以用代碼語句

tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));tv.setSingleLine(true);

 

marqueeRepeatLimit屬性
在ellipsize指定marquee的情況下,設定重複滾動的次數,當設定為marquee_forever時表示無限次。

focusable屬性
自己猜測的,應該是能否獲得焦點,同樣focusableInTouchMode應該是滑動時能否獲得焦點。

組合View的問題:

XML語言: 組合View
< LinearLayoutxmlns:android =“http://schemas.android.com/apk/res/android”android:orientation =“vertical”android:gravity =“center_vertical”android:background =“@drawable/f_background”android:layout_width =“fill_parent”android:focusable =“true”android:layout_height =“50px” >< TextViewandroid:id =“@+id/info_text”android:focusable =“true”android:layout_width =“fill_parent”android:layout_height =“wrap_content”android:text =“test marquee  .. “android:textColor =“@color/black”android:singleLine =“true”android:ellipsize =“marquee”android:marqueeRepeatLimit =“3″android:textSize =“18sp”/>< TextViewandroid:id =“@+id/date_text”android:layout_width =“fill_parent”android:layout_height =“wrap_content”android:layout_gravity =“bottom”android:textColor =“@color/gray”android:text =“2010/05/28″android:textSize =“12sp”/></ LinearLayout >

 

上面樣本中2個TextView組合為一個View,由於設定了LinearLayout為focusable而TextView就沒法取得焦點了,這樣 這個TextView的跑馬燈效果就顯示不出來,就算你也設定TextView的  android:focusable= "true" 也是 沒用的. 這個時候就要使用addStatesFromChildren 這個屬性了,在LinearLayout中設定這個屬性, 然後設定TextView的focusable=  "true"  就可以了.關於 addStatesFromChildren的說明:

Sets whether this ViewGroup‘s drawable states also include its children‘s drawable states.

 

Android:TextView 自動滾動(跑馬燈) (轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.