TextView實現滾動顯示的效果


一.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"
         />



免責聲明!

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



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