Android中長TextView實現跑馬燈效果

在Android開發中有時候我們會在一個TextView中輸入較長的字符串,當輸入較長字符串時手機屏幕可能會無法完全顯示文本的內容。
例如:
<TextView
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="長的TextView,長的TextView,長的TextView,長的TextView"
        />
這樣一個TextView的內容一行顯示不全,系統默認情況下會自動換行,爲了不讓文本自動換行我們需要加一條屬性:
 android:singleLine="true"

這樣我們的文本就會只在一行中顯示了,但是執行完效果後會發現不完全顯示的文本會顯示省略號,可以通過添加

android:ellipsize="marquee"

屬性設置,此時可以解決省略號的問題,但是並不能實現跑馬燈的效果,如果想要實現跑馬燈的效果還需要加上兩條屬性

android:focusable="true"
android:focusableInTouchMode="true"

這樣就可以實現跑馬燈效果了。但是,你以爲這樣就完了,錯了,此時讓我們把佈局設置的稍微複雜一點,在文本框下再添加一個文本框同樣按上邊的文本框進行設置,運行後你會發現:理想很豐滿,現實很骨感。 第二個文本框並不會顯示跑馬燈效果,很多小夥伴感到很詫異,這是爲啥 呢?很簡單第一個文本框設置的屬性android:focusable="true"此時的焦點已經放到了第一個文本框上,返回爲true,所以第二個文本框設置的焦點屬性就不管用了,此時我們要想別的辦法讓兩個文本框都能獲得焦點,我告訴大家一個方法,自己重寫一個TextView組件,代碼如下:

public class MyTextView extends TextView {

    public MyTextView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
    @Override
    public boolean isFocused() {
        // TODO Auto-generated method stub
        return true;
    }

}

然後將TextView組件換成自己重寫的MyTextView即可完美解決了。
ok 拜拜 有興趣的小夥伴自己試試吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章