1. 程式人生 > >Android 小樣之TextView橫向滾動(跑馬燈效果)

Android 小樣之TextView橫向滾動(跑馬燈效果)

偶爾做app的時候由於文字過多,但是又不想換行顯示,影響整體佈局效果,可以使用文字橫向滾動效果。

使用繼承Android原生TextView控制元件實現

  1. 設定xml檔案TextView屬性
<com.textview.MarqueeTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:singleLine="true"
    android:marqueeRepeatLimit="marquee_forever"
android:layout_margin="14dip" android:textSize="18sp" android:text="@string/address"/>
要點:
1.設定文字長度長於可顯示範圍:android:singleLine="true"
2.設定跑馬燈顯示樣式:android:ellipsize="marquee"
3.設定迴圈次數為無限次:android:marqueeRepeatLimit
4.TextView只有在獲取焦點後才會滾動顯示隱藏文字,因此要重寫TextView類的isFocused方法,使其預設始終返回true。

2. 重寫TextView
跑馬燈效果需要TextVIew獲得當前的焦點(focus)。然而對於TextView這個控制元件來說,他的預設的Clickable,LongClickable,Focusable,FocusableInTouchMode這四個屬性的值都是false。因此要重寫TextView類的isFocused方法,使其預設始終返回true。

package com.textview;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

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; } }