假设我有一个Fragment
TextView
(我们称之为TextView A),其中包含String
个单词,另一个TextView
(TextView B)是一个计时器,由这样的处理程序更新...... mHandler.postDelayed(this, 100);
。
问题是每当Handler
B的TextView
每秒更新一次,就会阻止TextView
A运行marquee animation
。
以下是我用来更新TextView
B ...
public void updateTextViewB()
{
Thread thread = new Thread() {
@Override
public void run() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
// Code that set's the constantly updating time
mHandler.postDelayed(this, 100);
}
});
}
};
thread.start();
}
有什么选择可以解决这个问题?我应该将焦点设置为TextView
A?
答案 0 :(得分:0)
我遇到了同样的问题并且解决了它。如果您的TextView A和B处于相同的布局,那么它们是兄弟姐妹,每次对任何兄弟(包括A本身)的焦点进行更新时,选取框动画将重新开始。每次更新B时,它都会请求焦点,以便重新启动选框动画。解?您需要做的就是将A放在自己的布局中,这样它就没有兄弟姐妹,只有一个父母。这是布局:
<LinearLayout
android:id="@+id/mainLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/text_b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text being updated each second"
/>
<LinearLayout
android:id="@+id/marquee_text_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/text_b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="Long text with marquee animation that keeps running on the screen :P :)"
/>
</LinearLayout>
</LinearLayout>