自定義滾動文字

我叫阿狸貓發表於2014-04-01
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.button.MainActivity"
    tools:ignore="MergeRootFrame" >
    
    <!-- 
    	singleLine:表示在一行裡顯示
    	ellipsize表示:如果超出顯示範圍
    		   start:開頭省略
    		   middle:中間省略
    		   end:末尾省略
    		   marquee:在獲取焦點的時候滾動顯示,需要配合   android:focusableInTouchMode="true" 使用
    		         表示在觸控的時候獲取焦點
     -->
    <Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:ellipsize="start"
        android:singleLine="true"
        android:text="按鈕111111" />

    <Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:ellipsize="middle"
        android:singleLine="true"
        android:text="按鈕2222222" />

    <Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="按鈕33333333" />

    <Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:ellipsize="marquee"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        android:text="按鈕44444444" />
</LinearLayout>

效果如下:



但是如果是TextView元件給它設定ellipsize:marquee和android:focusableInTouchMode="true"屬性,並不能讓它滾動起來。因為TextView是獲取不到焦點的。我們可以繼承TextView覆寫它的isFocused方法,讓它返回ture即可。

import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewDebug.ExportedProperty;
import android.widget.TextView;

public class MyTextView extends TextView {

	/*
	 * 覆蓋父類的三個建構函式
	 */
	public MyTextView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public MyTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public MyTextView(Context context) {
		super(context);
	}
	
	/**
	 * 覆寫isFocused函式,讓它返回true即可
	 */
	@Override
	@ExportedProperty(category = "focus")
	public boolean isFocused() {
		return true;
	}
}
在使用TextView的時候用自定義的MyTextView包名.類名代替,這樣文字就能滾動了
<com.example.button.MyTextView 
         android:focusableInTouchMode="true"
         android:ellipsize="marquee"
         android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:singleLine="true"
    	android:text="哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈"/>




相關文章