android原生TextView怎么控制是否开始跑走马灯

在实际项目中,经常遇到文本超出控件宽度,显示不全,此时android提供了一个方法:
   void android.widget.TextView.setEllipsize(TruncateAt where)  

   此方法意思就是设置文本超出宽度的展示效果。TruncateAt定义如下:


  public static enum TruncateAt {
        END,
        MARQUEE,
        MIDDLE,
        START;

        private TruncateAt() {
        }
    }
   END: 表示在文本展示不全时候,在文本末尾显示省略号

   MARQUEE: 表示在文本展示不全时候,以走马灯形式滚动

   MIDDLE:表示在文本展示不全时候,在文本中间尾显示省略号

   START:表示在文本展示不全时候,在文本开始处显示省略号

  默认不设置,表示无以上效果。超出控件部分文字会被截断显示。

  所以,可以使用null关闭ellipsize。即:

  setEllipsize(null);

另外,以上属性设置是立即生效的。即如果文本是MARQUEEN,走马灯滚动状态, 
如果设置为null时候,在滚动的走马灯马上会回到初始状态。且文本被截断。
如果设置为END,在滚动的走马灯会回到末尾有省略号的样式。  
控制走马灯滚动可以如下设置:
   // 开始滚动
    public void startScroll() {
        setEllipsize(TextUtils.TruncateAt.MARQUEE);
    }
    // 停止滚动,回到起点
    public void stopScroll() {
        setEllipsize(TextUtils.TruncateAt.END);或者setEllipsize(null);
    }



android样进行走马灯滚动前提是该控件在焦点状态,且可以聚焦。但是很多时候文本不聚焦也需要滚动提示用户。
如果不自定义view,那么android系统的TextView怎么样才能达到效果呢?
答案就是复写TextView的isFocused方法:
   //默认滚动
    @Override
    public boolean isFocused() {
        return true;
    }

  

另外,setSingleLine()或setHorizontallyScrolling(bool)来限制为单行文本。
如果setMaxLines(int)被用来设置两行或两行以上的文本,只有END和MARQUEE被ellipsize方法支持(其他ellipsiz类型将不会做任何事情)。

示列:


    


public class MarqueeTextView extends TextView{

    public MarqueeTextView(Context context) {
        super(context);
    }

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

    public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
        this.setScrollbarFadingEnabled(true);
        this.setHorizontallyScrolling(true);
        this.setHorizontalFadingEdgeEnabled(true);
        this.setSingleLine(true);
        this.setFocusable(true);
        this.setMarqueeRepeatLimit(-1);
        this.setMaxLines(1);
    }

    @Override
    public boolean isFocused() {
        return true;
    }

}


你可能感兴趣的:(技术)