一.TextView基礎
TextView實現文字滾動需要以下幾個要點:
1.文字長度長於可顯示范圍:android:singleLine="true"2.設置可滾到,或顯示樣式:android:ellipsize="marquee"
3.TextView只有在獲取焦點后才會滾動顯示隱藏文字,因此需要在包中新建一個類,繼承TextView。重寫isFocused方法,這個方法默認行為是,如果TextView獲得焦點,方法返回true,失去焦點則返回false。跑馬燈效果估計也是用這個方法判斷是否獲得焦點,所以把它的返回值始終設置為true。
TextView屬性介紹:
ellipsize屬性
設置當文字過長時,該控件該如何顯示。有如下值設置:”start”—–省略號顯示在開頭;”end”——省略號顯示在結尾;”middle”—-省略號顯示在中間;”marquee” ——以跑馬燈的方式顯示(動畫橫向移動)
marqueeRepeatLimit屬性
在ellipsize指定marquee的情況下,設置重復滾動的次數,當設置為marquee_forever時表示無限次。
focusable屬性
能否獲得焦點,同樣focusableInTouchMode是滑動時能否獲得焦點。
二.實現
1、在frameworks\base\core\java\android\widget\下創建AlwaysMarqueeTextView.java,內容如下:
package android.widget; import android.content.Context; import android.util.AttributeSet; import android.widget.TextView; import android.widget.RemoteViews.RemoteView; @RemoteView 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); } @Override public boolean isFocused() { return true; } }2、執行update-api的命令:
./mk update-api
3、重新編譯整個工程
4、修改相應的TextView控件
- <TextView + <AlwaysMarqueeTextView android:id="@+id/item_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@id/item_icon" android:layout_marginBottom="6dip" android:textAppearance="?android:attr/textAppearanceMedium" + android:focusableInTouchMode="true" android:singleLine="true" - android:ellipsize="none" + android:ellipsize="marquee" + android:marqueeRepeatLimit="marquee_forever" />