Android控件之TextView跑马灯效果

时间:2021-11-18 05:58:26

TextView中的文本太多时,我们希望文本以跑马灯的形式展现,xml文件中对TextView做以下属性配置即可实现:


    <TextView
        android:id="@+id/show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:ellipsize="marquee"
        android:focusable="true"
        android:scrollHorizontally="true"
        android:focusableInTouchMode="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:padding="10dp"
        android:singleLine="true" />

 

  String html = "囿于安全性、<b>合规性和</b>风险等方面的挑战,即使海外,金融业也从未真正将业务迁往公有云。无可奈何之下,余额宝“背水一战”,却发现胜利的果实是如此甜美。";

  CharSequence charSequence = Html.fromHtml(html);// 支持html

  show.setText(charSequence);

  show.setMovementMethod(LinkMovementMethod.getInstance());// 可以

 

在手机上试了下,没有效果,然而在虚拟机上试了下却有效果。百思不解??

虚拟机上的效果图:

Android控件之TextView跑马灯效果 

 

======================================================================================================

======================================================================================================

另外一种方式:

继承TextView:

package com.example.html;

import android.content.Context;
import android.graphics.Rect;
import android.text.TextUtils.TruncateAt;
import android.util.AttributeSet;
import android.widget.TextView;

public class ScrollingTextView extends TextView {

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

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

 public ScrollingTextView(Context context) {
  super(context);
  init();
 }

 @Override
 protected void onFocusChanged(boolean focused, int direction,
   Rect previouslyFocusedRect) {
  if (focused)
   super.onFocusChanged(focused, direction, previouslyFocusedRect);
 }

 @Override
 public void onWindowFocusChanged(boolean focused) {
  if (focused)
   super.onWindowFocusChanged(focused);
 }

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

 // add by laomo
 private void init() {
  setEllipsize(TruncateAt.MARQUEE);// 对应android:ellipsize="marquee"
  setMarqueeRepeatLimit(-1);// 对应android:marqueeRepeatLimit="marquee_forever"
  setSingleLine();// 等价于setSingleLine(true)
 }
}

    <com.example.html.ScrollingTextView
        android:id="@+id/show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

 

  show = (ScrollingTextView) findViewById(R.id.show);

  String html = "囿于安全性、<b>合规性和</b>风险等方面的挑战,即使海外,金融业也从未真正将业务迁往公有云。无可奈何之下,余额宝“背水一战”,却发现胜利的果实是如此甜美。";

  CharSequence charSequence = Html.fromHtml(html);// 支持html

  show.setText(charSequence);

  show.setMovementMethod(LinkMovementMethod.getInstance());//

 

 

下面方式在真实手机上有效。

 

Android控件之TextView跑马灯效果