Android學習總結——TextView跑馬燈效果


Android系統中TextView實現跑馬燈效果,必須具備以下幾個條件:

1、android:ellipsize=”marquee”
2、TextView必須單行顯示,即內容必須超出TextView大小
3、TextView要獲得焦點才能滾動
 
實現代碼:

xml:

android:singleLine="true" //單行顯示
android:ellipsize="marquee" //跑馬燈顯示(動畫橫向移動)
android:marqueeRepeatLimit="marquee_forever"//永久滾動
android:focusable="true" //控件是否能夠獲取焦點
android:focusableInTouchMode="true" //是否在觸摸模式下獲得焦點

 

   當我們需要多個TextView實現跑馬燈效果時,上面的方法就不管用了,因為它獲取不到焦點了。所以就需要自定義一個TextView,繼承TextView,並且重寫isFocuse()方法,讓它永遠返回true,這樣跑馬燈效果就能一直的跑起來了。

package com.example.music.marquee; import android.content.Context; import android.util.AttributeSet; import android.widget.TextView; /** * Created by xch on 2016/10/25. */

public class MarqueeTextView extends TextView { public MarqueeTextView(Context context) { super(context); } public MarqueeTextView(Context context, AttributeSet attrs) { super(context, attrs); } public MarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean isFocused() { return true; } }

 

 接下來布局文件中使用自定義的TextView就好。具體寫法就是:包名.自定義TextView

<com.example.music.marquee.MarqueeTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" />

 

補充:

1.android:ellipsize屬性:

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

 

2.在Android Studio中,TextView單行顯示:singleline語句已廢棄不推薦使用,可以替換為 maxLines="1",but我換了之后跑馬燈無法實現,下面來看看這兩個屬性的區別:

    從字面意思理解,這兩個都是限制Text的行數。那么singleLine="true" 和maxLine="1" 都是限制為一行,but,maxLines 是在限制高度, singleLine 是強制不讓換行。從高度來講是一樣的,兩者肯定都顯示一行,但從換行的位置來講就有區別了,maxLines並不會改變其換行的位置,而singleLine則會。從這個角度講,singleLine的顯示會好一些,因為如果超過一行singleLine會在一行內顯示,后面加上"...",而maxlines="1" 則不會,它依然會在原來換行的位置換行,所以有時候一行不滿,但是卻不顯示剩下的部分。

    網上查資料之后,可能是maxLine與ellipsize配合失效。對於這個問題,我這里顯示一行就暫時用singleLine="true"代替吧。

順便貼上網上的一些解決辦法參考:http://blog.csdn.net/itchenlin/article/details/50386396

                                                   http://blog.csdn.net/womengmengyan/article/details/52136054 

                                           http://blog.csdn.net/true100/article/details/43965311

                                           http://blog.csdn.net/fengkuanghun/article/details/8351149

                                                    http://ck19860613.iteye.com/blog/1116858

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM