Android自动水平滚动TextView
我正在尝试实现将自动滚动的单行文本视图。 但是我不幸得不到它的工作。 AutoScrollTextView是在LinearLayout(width和height = fill_parent)中声明的。 这个类基本上使用一个Handler来调用自己滚动给定的数量。 我简化了代码,只显示一个文本视图,应该每秒滚动5个像素。
日志输出是正确的,getScrollX()方法返回适当的scrollX位置。
如果我不调用requestLayout()
,没有任何东西被绘制。 invalidate()
不起作用。
有人会有线索吗?
public class AutoScrollTextView extends TextView { public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setSingleLine(); setEllipsize(null); setText("Single-line text view that scrolls automatically if the text is too long to fit in the widget"); } // begin to scroll the text from the original position public void startScrolling() { scrollHandler.sendEmptyMessage(0); } private Handler scrollHandler = new Handler() { private static final int REFRESH_INTERVAL = 1000; public void handleMessage(Message msg) { scrollBy(5, 0); requestLayout(); Log.debug("Scrolled to " + getScrollX() + " px"); sendEmptyMessageDelayed(0, REFRESH_INTERVAL); } }; }
如果你不需要对TextView
进行子类化,你可以在布局文件中试试这个:
<TextView android:text="Single-line text view that scrolls automatically if the text is too long to fit in the widget" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit ="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" android:scrollHorizontally="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
另外,在你的代码中使用下面的代码:
findViewById(R.id.serviceColorCode).setSelected(true);
[根据意见编辑回答]
我的解决scheme工作
<TextView android:id="@+id/titolotxt" android:layout_width="..." android:layout_height="..." android:ellipsize="marquee" android:gravity="left" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="@string/titolo"/>
TextView
必须被设置为: textView.setSelected(true);
例如通过onCreate
的代码。
在这些XML代码被@rajat回答后
<TextView android:text="Single-line text view that scrolls automatically if the text is too long to fit in the widget" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit ="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" android:scrollHorizontally="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
我们需要设置
TextView tv=(TextView)findViewById(R.id.textview1); tv.setSelected(true);
最终使我的工作
有时无效将无法正常工作,直到你在主线程中调用无效,如下所示:
handler.post(new Runnable() { @Override public void run() { yourView.invalidate(); } });
// this TextView will marquee because it is selected TextView marqueeText1 = (TextView) findViewById(R.id.marquee_text_1); marqueeText1.setSelected(true); <TextView android:id="@+id/marquee_text_1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit." android:textSize="24sp" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" />